■ 現在のこのページの役立ち度:
表示されない場合こちらのリンクからもご覧になれます。
■ このページの役立ち度を評価する:
役立ち度を評価してください。
(1(左):あまり役立たない - 5(右):大変役立った):
■ ページの共有:
[ サイト内検索 ]
カスタム検索
#4937-0
配列変数を使ったSQL文(select , insert)のループ処理は?
配列変数に保持されている内容を、クライアント端末のMS-Accessファイルの
某テーブルの某列の内容とチェックし、重複が無ければinsert文で
順次そのテーブルにレコード挿入するプログラムを作りたいのです。

超初心者が見よう見まねで作った大変お粗末なプログラムだと思いますが、
「★」の部分の書き方を御教授願います。m(_ _)m
また、他に修正/追加/削除すべき点がありましたら、ご指摘願います。
(但し、別プロシージャにて、配列変数の定義及び内容代入は済んでいると仮定します)

Dim db As Database
Dim sql As String

Set db = OpenDatabase("c:\test\test.mdb")
Do While i < 11
  i = i + 1 
  sql = "SELECT FROM テーブル名 WHERE 列名=" & 配列変数(i)
  If ゼロ行ならば−★
    sql = "INSERT INTO テーブル名 VALUES(配列変数(i),値1,・・・)"
    db.Execute sql
  End If  
Loop
db.Close
#4938-0
RE#4937:配列変数を使ったSQL文(select , insert)のループ処理は?
> Do While i < 11
>   i = i + 1 
素直に、Forループじゃいけないんですか? (^_^;)

>   sql = "SELECT FROM テーブル名 WHERE 列名=" & 配列変数(i)
SELECT句に、何も指定されていませんね。
行数を数えるのなら、SELECT COUNT(*) FROM 〜 にしましょう。

>   If ゼロ行ならば−★
ヒント1:Recordsetオブジェクトを使います。
ヒント2:先に書いた、COUNT SQL関数を使わないのであれば、RecordCountプロパティが使えます。

# ヘルプの中に使用例があります。
#4962-0
【お礼】#4938:配列変数を使ったSQL文(select , insert)のループ処理は?
> > Do While i < 11
> >   i = i + 1 
> 素直に、Forループじゃいけないんですか? (^_^;)

そうですね、、、Forループの方がスッキリしますね。f^^;
 
> >   sql = "SELECT FROM テーブル名 WHERE 列名=" & 配列変数(i)
> SELECT句に、何も指定されていませんね。
> 行数を数えるのなら、SELECT COUNT(*) FROM 〜 にしましょう。

あっ、単なる入力漏れでした。f^_^;
全列指定の「SELECT * FROM ・・・」と書きたかったのです。
 
> >   If ゼロ行ならば−★
> ヒント1:Recordsetオブジェクトを使います。
> ヒント2:先に書いた、COUNT SQL関数を使わないのであれば、RecordCountプロパティが使えます。
> # ヘルプの中に使用例があります。

ヘルプで調べました。 目的の箇所を発見できました。  どうも有り難うございました。
#4968-0
RE#4962:【お礼】#4938:配列変数を使ったSQL文(select , insert)のループ処理は?
> 全列指定の「SELECT * FROM ・・・」と書きたかったのです。
件数を調べたいだけならば、それはトラフィックの無駄ですよ。
(レコードサイズが大きいほど、無駄が大きくなります)

件数を調べるなら、COUNTを使いましょう。

>>>   If ゼロ行ならば−★
>> ヒント1:Recordsetオブジェクトを使います。
>> ヒント2:先に書いた、COUNT SQL関数を使わないのであれば、RecordCountプロパティが使えます。
>> # ヘルプの中に使用例があります。
> ヘルプで調べました。 目的の箇所を発見できました。  どうも有り難うございました。
もし、ゼロ行かどうかを知りたいだけであれば、Recordsetを開いた直後に、
RecordsetのEOFプロパティを調べてもOKです。

たとえば、
  Set RS = 〜.OpenRecordset(SQL)
  If RS.EOF Then
      MsgBox "データ無し!"
  Else
     RS.Edit
     RS!列1 = Text1.Text
     RS!列2 = Text2.Text
     RS.Update
     MsgBox "更新完了!"
  End If
  RS.Close

のような感じです。
#4973-0
再お礼#4968:【お礼】#4938:配列変数を使ったSQL文(select , insert)のループ処理は?
> もし、ゼロ行かどうかを知りたいだけであれば、Recordsetを開いた直後に、
> RecordsetのEOFプロパティを調べてもOKです。
> たとえば、・・・

ゼロ行かどうかを知りたいだけです。f^_^;
 
具体例までご丁寧に有り難うございました。
このページと関連する記事:
#5345-0RE#5343:SQL実行結果1999-09-17(金) 13:22
#5748-0*.iniの使い方1999-12-16(木) 12:07
#46110-0テーブル2001-08-23(木) 16:52
#20259-0SQLの書き方2002-03-16(土) 12:39
#35657-0SQL文のCOUNTについて2000-12-19(火) 15:29
#6884-0SQL文のCOUNT関数について2000-03-24(金) 14:19
#12086-0レコードセットに対してSQL文は投げれますか?1999-12-20(月) 18:28
#2349-0美里2002-05-31(金) 22:13
#207-1重複しないレコードの取得について2004-01-20(火) 15:07
#24063-0ADOで "SELECT COUNT(*) ”の使い方を教えて下さい。2000-06-23(金) 00:58
お探しの情報は見つかりましたか?お困りの問題は解決しましたか?
サイト内検索, 似た記事検索で見つからなくてもあきらめずに掲示板で質問してみましょう。
VB初心者友の会があなたのお役に立てれば幸いです。また、本ページの投稿者の方々にこの場を借りて感謝致します。
本ページは過去ログを集めて自動構成しています。よろしければこのページに関するフィードバックをお願いします。
(※ 構成の誤り、広告等の不適切な記事、リンク切れ、読めないページの報告など)