windows7のwindowsupdateが実行できないときの対処

windows7のwindowsupdateが実行できないときの対処

①Cドライブのディスククリーンアップ
システムクリーンアップとwindowsupdate系のファイルの削除
②コントロールパネル→管理ツール→サービス
→windowsupdate右クリック→停止
③C:\Windows\SoftwareDistribution\Downloadのフォルダの中身をすべて削除
④C:\Windows\SoftwareDistribution\DataStoreのDataStore.edbを削除
⑤コントロールパネル→管理ツール→サービス
→windowsupdate右クリック→開始
⑥再起動
⑦windowsupdateの実行
(これでできない場合は、最新の更新を1つダウンロードインストール)

Access 変更ある箇所だけ更新

Private Sub 更新_Click()
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim SQL As String

On Error GoTo ErrRtn

If MsgBox(“入力変更された項目だけ更新されます。実行しますか?”, vbYesNo, “更新修正確認”) = vbYes Then

SQL = “SELECT * FROM dbo_data_customer WHERE ID =” & Me!edit_ID & “”

Set cn = CurrentProject.Connection
rs.Open SQL, cn, adOpenKeyset, adLockOptimistic

cn.BeginTrans

While Not rs.EOF

If Not IsNull(edit_生年月日) Then
If edit_生年月日 = “1900/01/01” Then
rs!生年月日 = Null
Else
rs!生年月日 = edit_生年月日
End If
End If

If Not IsNull(edit_性別) Then
If edit_性別 = 99999 Then
rs!性別 = Null
Else
rs!性別 = edit_性別
End If
End If

If Not IsNull(edit_顧客姓) Then
If edit_顧客姓 = 99999 Then
rs!顧客姓 = Null
Else
rs!顧客姓 = edit_顧客姓
End If
End If

If Not IsNull(edit_顧客名) Then
If edit_顧客名 = 99999 Then
rs!顧客名 = Null
Else
rs!顧客名 = edit_顧客名
End If
End If

If Not IsNull(edit_顧客せい) Then
If edit_顧客せい = 99999 Then
rs!顧客せい = Null
Else
rs!顧客せい = edit_顧客せい
End If
End If

If Not IsNull(edit_顧客な) Then
If edit_顧客な = 99999 Then
rs!顧客な = Null
Else
rs!顧客な = edit_顧客な
End If
End If

If Not IsNull(edit_電話番号) Then
If edit_電話番号 = 99999 Then
rs!電話番号 = Null
Else
rs!電話番号 = edit_電話番号
End If
End If

If Not IsNull(edit_携帯番号) Then
If edit_携帯番号 = 99999 Then
rs!携帯番号 = Null
Else
rs!携帯番号 = edit_携帯番号
End If
End If

If Not IsNull(edit_法人名) Then
If edit_法人名 = 99999 Then
rs!法人名 = Null
Else
rs!法人名 = edit_法人名
End If
End If

If Not IsNull(edit_担当者) Then
If edit_担当者 = 99999 Then
rs!担当者 = Null
Else
rs!担当者 = edit_担当者
End If
End If

If Not IsNull(edit_郵便番号) Then
If edit_郵便番号 = 9999999 Then
rs!郵便番号 = Null
Else
rs!郵便番号 = edit_郵便番号
End If
End If

If Not IsNull(edit_都道府県) Then
If edit_都道府県 = 99999 Then
rs!都道府県 = Null
Else
rs!都道府県 = edit_都道府県
End If
End If

If Not IsNull(edit_市町村) Then
If edit_市町村 = 99999 Then
rs!市町村 = Null
Else
rs!市町村 = edit_市町村
End If
End If

If Not IsNull(edit_番地) Then
If edit_番地 = 99999 Then
rs!番地 = Null
Else
rs!番地 = edit_番地
End If
End If

If Not IsNull(edit_edit_建物名) Then
If edit_建物名 = 99999 Then
rs!建物名 = Null
Else
rs!建物名 = edit_建物名
End If
End If

If Not IsNull(edit_備考) Then
If edit_備考 = 99999 Then
rs!備考 = Null
Else
rs!備考 = edit_備考
End If
End If

rs.Update
rs.MoveNext
Wend

cn.CommitTrans

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

Else
MsgBox (“更新せずに元に戻ります。更新しない場合は、閉じてください。”)
Exit Sub
End If

ExitErrRtn:
MsgBox (“更新しました。”)
DoCmd.Close acForm, “修正顧客情報”
‘ DoCmd.ShowAllRecords
DoCmd.RunCommand acCmdRefresh
Exit Sub

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

チェックボックスの場合

If edit_完了確認 = -1 Then
If rs!完了確認 = -1 Then
rs!完了確認 = 0
Else
rs!完了確認 = -1
End If
End If

Access ADO 更新

ADOによるレコードセットを使った更新方法を記載しておく。

Private Sub btn_更新_Click()
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim SQL As String

On Error GoTo ErrRtn

SQL = “SELECT * FROM dbo_accounts WHERE MNO =” & Me!edit_MNO & “”

Set cn = CurrentProject.Connection
rs.Open SQL, cn, adOpenKeyset, adLockOptimistic

cn.BeginTrans

While Not rs.EOF

If rs!MNO = edit_MNO Then
rs!前月末残高 = edit_残高
Else
MsgBox (“一致するメーカーNOが存在しません。”)
End If

rs.Update
rs.MoveNext
Wend

cn.CommitTrans

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

ExitErrRtn:
DoCmd.ShowAllRecords
Exit Sub

ErrRtn:
MsgBox “エラー: ” & Err.Description

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

End Sub

Access 別テーブルの値で更新する

Private Sub データ更新_Click()
Dim cn As New ADODB.Connection
Dim cmd As New ADODB.Command
Dim SQL As String

On Error GoTo ErrRtn

Set cn = CurrentProject.Connection
cn.BeginTrans

#########前は、下の内容でよかったのに、今回は、演算子がないというエラー########
‘SQL = “UPDATE ”
‘SQL = SQL & “dbo_accounts ”
‘SQL = SQL & “SET 当月金額 = test.合計 ”
‘SQL = SQL & “FROM dbo_accounts INNER JOIN test ”
‘SQL = SQL & “ON dbo_accounts.MNO = test.MNO”
################################################
####結局下記のようにしてOKになった。#####
SQL = “UPDATE ”
SQL = SQL & “dbo_accounts ”
SQL = SQL & “INNER JOIN test ”
SQL = SQL & “ON dbo_accounts.MNO = test.MNO ”
SQL = SQL & “SET 当月金額 = test.合計 ”

cmd.ActiveConnection = cn
cmd.CommandText = SQL
cmd.Execute

cn.CommitTrans

cn.Close: Set cn = Nothing

ExitErrRtn:
Exit Sub

ErrRtn:
MsgBox “エラー: ” & Err.Description

cn.RollbackTrans
cn.Close: Set cn = Nothing

End Sub

Access SQLでデータの更新

SQL = “UPDATE ”
SQL = SQL & “dbo_stock_parts ”
SQL = SQL & “INNER JOIN ”
SQL = SQL & “job_product_parts_calc ON ”
SQL = SQL & “(dbo_stock_parts.HNO = job_product_parts_calc.HNO AND ”
SQL = SQL & “job_product_parts_calc.JNO = ” & Me!JNO & “) ”
SQL = SQL & “SET ”
SQL = SQL & “在庫数 = 在庫数 + job_product_parts_calc.計算数”

dbo_stock_partsテーブルには、JNO,HNO,在庫数フィールドがあり、job_product_parts_calcテーブル内には、JNO,HNO,計算数が存在する。

この2つのテーブルでHNOで一致しているものと、フォーム内のJNOが一致しているjob_product_parts_calc内の計算数で、dbo_stock_partsテーブルの在庫数を更新させるSQLになる。

実際に使っている例題は、この備忘録で、「VBA SQL」とでも検索すれば出てくる。

Access レコードセットを2つ使いたい場合

本当は、1つのVBAの中で、2つのレコードセットを使う方法があるのかもしれないが、今回はこの方法で処理して解決しました。callで別のVBAにして処理をさせた。

Private Sub B在庫処理_Click()
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim SQL As String

On Error GoTo ErrRtn

SQL = “SELECT * FROM dbo_stock_parts WHERE HNO =” & Me!call_HNO & “”
Set cn = CurrentProject.Connection
rs.Open SQL, cn, adOpenKeyset, adLockOptimistic

cn.BeginTrans

While Not rs.EOF
If IsNull(call_在庫確認) Then

If IsNull(rs!在庫数) Then
rs!在庫数 = call_数量
Else
rs!在庫数 = rs!在庫数 + call_数量
End If
Else
rs!在庫数 = rs!在庫数 – call_数量
End If
rs.Update
rs.MoveNext
Wend

cn.CommitTrans

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

ExitErrRtn:

Call stock
Exit Sub

ErrRtn:
MsgBox “エラー: ” & Err.Description

cn.RollbackTrans
rs.Close: Set rs = Nothing
cn.Close: Set cn = Nothing
End Sub

※callで下記のVBAを呼ばせて処理をさせている。

Sub stock()
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim SQL As String

On Error GoTo ErrRtn

SQL = “SELECT * FROM dbo_receiving_materials WHERE JNO =” & Me!call_JNO & “”

Set cn = CurrentProject.Connection
rs.Open SQL, cn, adOpenKeyset, adLockOptimistic

cn.BeginTrans

While Not rs.EOF
If IsNull(call_在庫確認) Then
rs!在庫確認 = “在庫済”
MsgBox (“在庫更新しました。”)
Else
rs!在庫確認 = Null
MsgBox (“在庫取消しました。”)
End If
rs.Update
rs.MoveNext
Wend

cn.CommitTrans

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

ExitErrRtn:

DoCmd.ShowAllRecords
Exit Sub

ErrRtn:
MsgBox “エラー: ” & Err.Description

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

End Sub

Access 複数レコード更新 抽出テクニック

Private Sub btn_完納確認_Click()
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim SQL As String

If IsNull(call_外注手配番号) Then
MsgBox (“データが選択されていません。”)
Exit Sub
End If

Dim EndString As Integer
Dim GaityuNumber As String
Dim Samplestring As String

#######201703231903-50362-3の201703231903-50362-までを抽出して更新したい。###
#######50362の部分は桁が変動するので、どうしたらいいのか?困った。###

Samplestring = Me!call_外注手配番号.Value ‘①テキストボックスの値を格納

EndString = InStr(14, Samplestring, “-“) ‘②二個目のハイフンの文字位置を取得

#######最初のハイフンの後ろ14行目から(201703231903-以降からハイフンまで)19行目がハイフン。

GaityuNumber = Mid(Samplestring, 1, EndString) ‘①の値の先頭から、②の位置までの文字列を取得

#######Mid関数で先頭から19行(201703231903-50362-)を抽出された。###

SQL = “SELECT * FROM dbo_outsourcing_running WHERE 外注手配番号 like ‘” & GaityuNumber & “%'”

#######201703231903-50362-以降の複数あるレコードが抽出される。###

###今回使ってない###
‘SQL = “SELECT * FROM dbo_outsourcing_running WHERE 外注手配番号='” & Me!call_外注手配番号 & “‘”
※フォームのテキストボックスにある完全一致のレコードだけを抽出

Set cn = CurrentProject.Connection
rs.Open SQL, cn, adOpenKeyset, adLockOptimistic

If MsgBox(“実行しますか? yes/no”, vbYesNo, “完納処理確認”) = vbYes Then
If call_完納確認 = “完 納” Then
If MsgBox(“完納取消実行しますか? yes/no”, vbYesNo, “完納取消処理確認”) = vbYes Then

While Not rs.EOF
rs!完納確認 = “取 消”
rs.Update

‘次の行へ
rs.MoveNext
Wend

Me!call_完納確認 = “取 消” ※取消しをクリックしたとき、フォームの場所に取消しをリアルタイムで表示させた。

rs.Close: Set rs = Nothing
cn.Close: Set cn = Nothing
DoCmd.ShowAllRecords
Exit Sub

End If

Else

While Not rs.EOF
rs!完納確認 = “完 納”
rs.Update
‘次の行へ
rs.MoveNext
Wend

Me!call_完納確認 = “完 納” ※完納をクリックしたとき、フォームの完納確認の場所に完納をリアルタイムで表示させた。

rs.Close: Set rs = Nothing
cn.Close: Set cn = Nothing
DoCmd.ShowAllRecords
End If
End If

End Sub

Access フォームの再読込

アクセスのフォームに、SQLのViewなどで表示しているところに、非連結でデータ更新したあとに、再読み込みをしたい時がある。これがなかなか探しても出てこなかったので苦労をした。

結局

DoCmd.ShowAllRecords

を使えば再読込できた。

SQLserver リレーションシップ

SQLserverのリレーションシップってどうやるの?

調べると、リレーションシップという言葉自体が違くて、「データベースダイヤグラム」ってところに設定するらしい。

その上で右クリックして、「新しいデータベースダイヤグラム」ってのをやると、テーブルを選択する画面が出現する。

あとは、Accessとにている。テーブルを追加して、キーとなる項目を結合させる。

ところが、Accessでテーブルをフォームから接続して、追加はできたが、削除ができない。つまり、SQLserverの方で拒否っているようだ。

ということで調べると、データベースダイヤグラムのテーブル同士を接合している線上で、プロパティで開き

[INSERT および UPDATE の指定] ってのがあるので、そこで、更新ルール、削除ルールってのがあるので、削除ルールの方を「重ねて表示」に選択したら、メインテーブルのレコードを削除したら、リレーションされている子テーブルのレコードも削除することができた。

削除ルールの設定内容は、下記のようなことです。ちょっと説明自体が分かりにくい。

[動作なし] 削除操作が許可されていないことをユーザーに通知するエラー メッセージが出力され、DELETE がロールバックされます。
[重ねて表示] 外部キー リレーションシップに関係するデータを含む行がすべて削除されます。
[Null に設定] テーブルのすべての外部キー列が null 値を使用できる場合、null 値が設定されます。 SQL Server 2005 および SQL Server 2008 にのみ適用されます。
[既定値の設定] テーブルのすべての外部キー列に既定値が定義されている場合、既定値が設定されます。 SQL Server 2005 および SQL Server 2008 にのみ適用されます。

更新ルールの設定内容は、

[動作なし] 削除操作が許可されていないことをユーザーに通知するエラー メッセージが出力され、DELETE がロールバックされます。
[重ねて表示] 外部キー リレーションシップに関係するデータを含む行がすべて削除されます。
[Null に設定] テーブルのすべての外部キー列が null 値を使用できる場合、null 値が設定されます。 SQL Server 2005 および SQL Server 2008 にのみ適用されます。
[既定値の設定] テーブルのすべての外部キー列に既定値が定義されている場合、既定値が設定されます。 SQL Server 2005 および SQL Server 2008 にのみ適用されます。