2016-08-06 13 views
0

レコードセットの名前を正しく記述する方法はありますか? "sq3 = ..."行にタイプミスマッチエラーがあります。& rsg &です。前もって感謝します。MS ACCESS VBA:SQL文の文字列にレコードセット名にタイプミスマッチエラーがあります

Dim rsG As DAO.Recordset 
Dim sq2, sq3 As String 

sq2 = "SELECT * from GeneralTable " 
sq2 = sq2 & "where gsede='LION' and (gExclu is null) and (gAda is null) " 
sq2 = sq2 & "order by gnomb,gnif;" 

Set rsG = CurrentDb.OpenRecordset(sq2) 

sq3 = "UPDATE " & rsG & " SET gsede ='AA' WHERE gsede='LION'" 

DoCmd.RunSQL (sq3) 
+0

質問に3つの非常に有用な回答があるようです。そしてあなたはあなたがかなり新しいので、フィードバックを提供することは他の人にとって非常に有用であると私は指摘しました。上向きの矢印をクリックすることで上向きの回答を行うことができます。これは、自分の答えがあなたにとって有益だったと伝えます。我々は皆人生の小さなことに感謝します。最高のものとして1つの回答を選択できる場合は、それをチェックしてください。より多くのフィードバックとそれは答えとして質問を終了するのに役立ちます。あなたのSO滞在をお楽しみください... – dbmitch

答えて

2

単一のクエリを使用してアップデートを行います。

update generaltable 
    set gsede = 'AA' 
    where gsede ='LION' and (gExclu is null) and (gAda is null); 

あなたがrsGのオフに更新を行う場合、あなたはおそらく、各行に別々のupdateをやると、それは非効率的です。

+0

これは唯一の例です、私はこのコードは同じことを2回同じことを知っています。私の質問は、コンパイルエラーなしでSQL文字列にレコードセット変数名を正しく書き込む方法です。 – Spiromer

+0

私は思う... UPDATE sqlのレコードセットを使用することは違法ですか? – Spiromer

3

データUPDATE SQLとVBAレコードセットを更新する方法が全く異なります。

あなたが行でレコードセットの行を更新したい場合は、あなたがSQLとレコードセットオブジェクトをミックスして一致させることはできません

Do While Not rsG.EOF 
    If rsG!foo = "bar" Then 
     rsG.Edit 
     rsG!gsede = "AA" 
     rsG.Update 
    End If 
    rsG.MoveNext 
Loop 
+0

ありがとう、私はそれを知っています。あなたの言うように、私の元のコードはループであった。すべてのコードは、vbaレコードセットを使用して書かれています。しかし、私はこのアイデアを持っていました。なぜなら、SQLの更新で1つだけのすべてのループ行を変更しないのはなぜですか? ... – Spiromer

2

ような何かを行います。最初の選択のロジックを含む完全な更新ステートメントを作成するか(他の回答候補と同様に)、または動的レコードセットを開いてプログラムでレコードをループして更新を行うことができます。

大規模なレコードセットをプログラムでループして更新することは、基本的な例ではそうではないコード内の各行を個別に検討することが不可欠でない限り、大量のSQL文によって処理される方が良いでしょう。

MSにはDAO.Recordset objectに関する良い記事があります。中途半端にダウンしているダイナミック型のRecordsetの例があります。

関連する問題