Access コンボボックスにてリスト外入力

コンボボックスにて、リスト外のデータを手打ちで入力しようとすると、指定した項目はリストにありませんとメッセージがでて入力ができない。

そこを、無理やり入力できるようにするには、

プロパティから、入力チェックを「いいえ」にするだけ。

ちなみに、値リスト編集の許可っていうプロパティは、コンボボックスに直接値リストを設定知る場合は、直接フォームから編集できるモードのようだ。

Access 検索して画面がのっぺら

検索して何も対処してないと、フォームがのっぺらぼうになる。
さらに、LIKE関数で曖昧だったりするとちょっとコツが必要。カンマとか、ダブルカンマとか

その対処方法。

Private Sub メーカー名検索_AfterUpdate()
Dim stCD As String
stCD = DCount(“*”, “dbo_mst_product”, “メーカー名 Like ‘*” & メーカー名検索 & “*'”)

If stCD = 0 Then
MsgBox “検索されたデータは存在しません。ご確認ください。”
メーカー名検索 = Null
Me.コード検索窓.SetFocus
Me.メーカー名検索.SetFocus
Exit Sub
Else
Me.RecordSource = “Select * From dbo_mst_product Where ” _
& “メーカー名 Like ‘*” & Me!メーカー名検索 & “*’ ” ‘”
メーカー名検索 = Null
End If

End Sub

Access フォームの再描画 再表示 並び替え

これをやれば、フォームが更新される。

DoCmd.RunCommand acCmdRefresh

以前。

DoCmd.ShowAllRecords

にて、再読込ができたときがあり、やってみたが、VBAの中にいれても、そとで単体で動かしてもフリーズしたり、並び替えがちゃんとできなかったりとなった。

方法を見つけた。

今回は、非連結のデータをサブフォームに追加した後、サブフォームにそのデータが乗ってこないために、わざわざフォームを閉じて、開いてという操作をしなければならなかった。

VBAのトランザクションが終わり、抜ける直前に、下記の文言をいれて事なきを得た。

ExitErrRtn:
Me.OrderBy = “順番”
Me.OrderByOn = True

Exit Sub

サブフォームには、順番で並び替えの設定をしてあるが、VBAないで強制に並び替えをしたらできた。

SQLserver データベースのリストア 元の環境復元

お客様のところと同じ環境で自分のところにも残しておき、修正が発生したときに簡単に検証できるようにしたいということで記載する。

以前、お客の環境で作成したアクセスとSQLserverとの接続をしたときに、全部、リンクテーブルを張り直ししてやったのが、どうも腑に落ちなかった。ODBCを調べてみると

ODBC;DSN=abcdefg;UID=xxxconect;PWD=xxxxxxx;DATABASE=dataxxx;LANGUAGE=日本語;

ODBC;DSN=bbccddefg;UID=xxxconect;PWD=xxxxxxx;DATABASE=dataxxx;LANGUAGE=日本語;

あ~~~~ただ単にネーミングが違うという初歩的ミス。結論は、アクセスの方のリンクテーブルなどは張り返す必要はなかったという事だ。

さて、本題

まずマシンを準備してあり、SQLEXPRESSもインストールしてあった。
(1)マシンのネーミングを変更する。※これだけで、xxx¥SQLEXPRESSのxxxの部分は、変わった。
コマンドラインから変更する方法など他にあるようだ。
(2)SMSSから、新しい空のデータベースを作成する。(もちろん復元するデータベース名と同じ)
(3)バックアップしてあったファイルをSMSSのバックアップ指定ホルダにコピーをして復元
※ここで「バックアップ セットは、既存のデータベース ‘hogehoge’ 以外のデータベースのバックアップを保持しています。」という変なエラー。オプションっていうわかりづらい入り口から行くと、上書きっていうのがある。それをすればエラーなく復元される。

復元したら、あとは、アクセスから普通に接続するだけ。
ただ、最初に書いたが、新しいPCから接続するには、ODBCの設定をしないとダメ。

SQLserver インポートエラー 列リスト IDENTITY_INSERT

SQLserverでデータをインポートしようとすると、「列リストを使用し、IDENTITY_INSERTをONにしてから実行」のエラーがでる。
どうも連番の設定がしているテーブルにデータを入れるときにコツがいるようだ。

結局下記のようなクエリにしたらOKになった。

SET IDENTITY_INSERT mst_openparts ON
INSERT INTO mst_openparts(GCD, PNO, 製品名コード, 順番, HNO, 品名コード, 品名, 型式, 部品数)
SELECT GCD, PNO, 製品名コード, 順番, HNO, 品名コード, 品名, 型式, 部品数
FROM [マスタ>部品展開]
SET IDENTITY_INSERT mst_openparts OFF

つまりは、細かく列を設定しないとエラーになるようだ。

LinkStationがネットワークから見えない。

Windows10home をネットワークに接続して、LinkStationを探しても出てこない。
ほかのWindows10professional だと見えている。

いろいろと調べてみましたが、なかなか出てこない。homeだからかとあきらめかけていたが、下記の方法でやっと見ることができた。
pingは通っており、LinkNavigatorだとちゃんと見える。Windowsネットワークからだけ見れない。
ほかのPCはちゃんとみえるが、LinkStationだけが見えないっていう症状。

解決策は、
SMB 1.0のサポートを有効にするには、「Windowsの機能の有効化または無効化」を操作する。

「SMB 1.0/CIFSファイル共有のサポート」のチェックを入れると再起動を求められるので、再起動したら、すぐにLinkStationが見えるようになった。

これを探るだけで時間がかかった。

Access 特定文字以降の抽出

Private Sub btn_データ変換_Click()

Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset

On Error GoTo ErrRtn

Set cn = CurrentProject.Connection
rs.Open “dbo_old_outsourcing”, cn, adOpenKeyset, adLockOptimistic

cn.BeginTrans

Do While Not rs.EOF

If IsNull(rs!HNO) = True Then

rs!HNO = Mid(rs!外注手配番号, InStr(1, rs!外注手配番号, “-“) + 1, InStr(InStr(1, rs!外注手配番号, “-“) + 1, rs!外注手配番号, “-“) – (InStr(1, rs!外注手配番号, “-“) + 1))

######上記の部分で、”-”で挟まれた間の文字を抽出している。######

‘ rs!手順 = Mid(rs!外注手配番号, InStr(InStr(1, rs!外注手配番号, “-“) + 1, rs!外注手配番号, “-“) + 1)

######上記の部分で、最後の”-”以降の文字を抽出している。######

rs!手順 = Mid(rs!外注手配番号, InStrRev(rs!外注手配番号, “-“) + 1)

######上記の部分で、”-”で挟まれた間の文字を抽出している。つまり右からハイフンの位置を検索しているという違い。処理は同じ結果がでる。######

rs.Update
End If

rs.MoveNext
Loop

cn.CommitTrans

rs.Close: Set rs = Nothing
cn.Close: Set cn = Nothing

ExitErrRtn:
MsgBox “変換完了しました。”
Exit Sub

ErrRtn:
MsgBox “エラー: ” & Err.Description
cn.RollbackTrans
rs.Close: Set rs = Nothing
cn.Close: Set cn = Nothing

End Sub

レンタルサーバーでDNSが引ける前にページの確認

レンタルサーバーにて、引っ越しをする前に、まだDNSが引けてない前に、移動先での動作確認をしたいものだ。
レンタルサーバー屋に質問したら、自分のPCのhostsってファイルを修正すれば見れるらしい。

今回はWindows10

C:\Windows\System32\drivers\etc

の中に、hosts というファイルがあるので、ディスクトップにでも移動して、そこに下記を付け加えればOK
管理者権限が必要なので注意が必要。

「IPアドレス+半角スペース+ドメイン名」

つまり、具体的に記載するなら、

555.444.333.222 hogehoge.co.jp
555.444.333.222 www.hogehoge.co.jp

を記載して、もとの場所に戻せば見れるようになり、旧サーバーでのサイトは見れなくなる。
つまり、自分のPCだけで見れている状態ってことです。

SQLserver バックアップ 復元 バッチファイル

SQLEXPRESSなので、バッチファイルで動かさなければならない。
実際に動かしてみたが、バックアップも復元も数秒で処理は終わった。

★バックアップのバッチファイル

echo off
rem
rem SQL Serverのバックアップ
rem

rem 日付の取得
set TODAY=%date:~-10,4%%date:~-5,2%%date:~-2,2%
rem echo %TODAY%

rem SQLServerの再起動
echo SQLServerを再起動します…..
net stop localhost$SQLEXPRESS
net start localhost$SQLEXPRESS

rem バックアップの実行
echo バックアップしています…..
sqlcmd -S localhost\SQLEXPRESS -Q “BACKUP DATABASE takezawa TO DISK = N’C:\TKH\sqlbackup\%TODAY%_DATABASE.bak’ WITH INIT”

★復元のバッチファイル

cho off
rem
rem SQL Serverのリストア
rem

rem 日付の取得
rem set TODAY=%date:~-10,4%%date:~-5,2%%date:~-2,2%
SET /P TODAY=復元するbakファイルの日付(YYYYMMDD)を入力して下さい。⇒
rem echo %TODAY%

rem SQLServerの再起動
echo SQLServerを再起動します…..
net stop localhost$SQLEXPRESS
net start localhost$SQLEXPRESS

rem リストアの実行
echo リストアしています…..
sqlcmd -S localhost\SQLEXPRESS -Q “RESTORE DATABASE takezawa FROM DISK = N’C:\TKH\sqlbackup\%TODAY%_DATABASE.bak’ WITH RECOVERY”