ADOレコードセット操作(Forループ用の変数)とは?

このQ&Aのポイント
  • CSVファイルからADO接続でレコードセットを取得し、順次出力する方法とは?
  • フィールド名が含まれていないCSVファイルのレコードセット取得方法は?
  • Forループを使用してフィールド数に応じた変数を取得する方法は?
回答を見る
  • ベストアンサー

ADOレコードセット操作(Forループ用の変数)

CSVファイルからADO接続でレコードセットを取得し、 順次出力していきたいと考えています。 CSVファイルにはフィールド名が含まれていないので schema.iniで  Col1=F1 char  Col2=F2 char  Col3=F3 char  Col4=F4 char  Col5=F5 char  Col6=F6 char・・・ という要領で名前を付けています。 現在、 myData(1)=recordset![F1] myData(2)=recordset![F2] myData(3)=recordset![F3]・・・ という形でフィールド数と同じ行数、レコードを取り出すコードを記述していますが、これを  For i = 1 to 6   myData(i)=recordset!F[i]  Next i ・・・のような形でForループにできないかと試行錯誤しています。 うまい具合にフィールド名の連番数字を使うには、どのようにしたら よいものでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

今現在、検証はできませんが下記でできませんか。 Dim strFIELD As String For i = 1 to 6  strFIELD = "F" & i  myData(i)=recordset(strFIELD) Next i

porusuke
質問者

お礼

早々のご回答、ありがとうございました! おかげさまで解決しました。 myData(1)=recordset![F1] は myData(i)=recordset(F1) と同義なんですね。 また、 myData(i)=recordset![strFIELD] ではダメだけど myData(i)=recordset(strFIELD) ならOKということもわかりました。 カッコの機能をきちんと理解しないといけないようです。 ありがとうございました。

関連するQ&A

  • ADOで現在のレコードの次のレコードの値も取得

    ADOで現在のレコードの次のレコードの値も取得するには? アクセスに対してADOでデータを取得しているのですが 例えばテーブルに フィールド1 あああ いいい ううう と入ってる時に、1レコード目のあああの値を取得しているときに、同時に次のレコードのいいいの値も取得することは可能ですか? Sub Sample() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Set cn = CurrentProject.Connection rs.Open "SELECT * FROM テーブル1", cn, adOpenStatic, adLockPessimistic For i = 1 To rs.RecordCount MsgBox rs("フィールド1") '現在のレコード MsgBox rs("フィールド1") + 1 '次のレコード rs.MoveNext Next rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub これだとダメなようです。 あああ いいい が表示されるようにしたいのですが、どうすればいいか教えてください。

  • adoのループについて カレントレコードについて

    adoのFor i = 1 To rs.RecordCountについて質問があります。 Sub test() Dim i As Long Dim MyFileName As String Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset MyFileName = CurrentProject.FullName cn.Open "Provider = Microsoft.ACE.OLEDB.12.0;" & "Data Source= " & MyFileName rs.Open "Tテーブル", cn, adOpenKeyset, adLockOptimistic For i = 1 To rs.RecordCount Debug.Print rs.Fields(0).Value rs.MoveNext Next rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub これを実行した時に、テーブルには、1,2,3・・・という値が入っていて、 イミディエイドウインドウにも1,2,3・・・と順番に取得されるのですが、 For i = 1 To rs.RecordCountを実行した時は、強制的にrs.MoveFirstされるのでしょうか? For i = 1 To rs.RecordCount rs.MoveFirst Debug.Print rs.Fields(0).Value rs.MoveNext Next これと同じ意味なのでしょうか? RecordCount プロパティ (ADO) のヘルプを見ましたが、この件に関する記述は探せませんでした。 ご回答よろしくお願いします。

  • アクセス ADO Null以外のレコードの件数を取得したい

    アクセス ADO Null以外のレコードの件数を取得したい テーブルにレコードが100行あり、そのうちNull値は40行あります。(主キーではないです) この時、ADOでNull以外にフィルタをかけたいのですが For i = 1 To RS.RecordCount RS.Filter = "フィールド = '*'" でも RS.Filter = "フィールド = 'Null''" でも、文字列になってしまい、うまくいきません。 RS.Filter = "フィールド " <> 'Null' だとエラーになります。 「<>null」を抽出する方法をご教授願います。

  • ADOでアクセスのレコードに複数のフィルタをかけるには?

    Sub ADO() Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & アクセスファイル名 Set rs = New ADODB.Recordset rs.Open "テーブル1", cn, adOpenKeyset, adLockOptimistic rs.Filter = ("フィールド1 = " & "'" & 変数1 & "'") rs.Filter = ("フィールド2 = " & "'" & 変数2 & "'") Debug.Print rs.RecordCount Set rs = Nothing Set cn = Nothing End Sub だと最終的にはフィールド2のフィルタ後の個数しか取得できません。 rs.Filter = ("案件CD = " & "'" & 案件CD & "'" And "プロセス = " & "'" & プロセス & "'") だと「型が一致しません」になります。 どうすれば変数1と変数2のフィルタ後のレコードの個数を取得できるのでしょうか? ご教授よろしくお願い致します。

  • チェックボックスの値を新規でレコードへ格納したい(Access2003 ADO)

    宜しくお願いします。 Access2003(WinXP)です。ADOで書いています。 テーブルへ新しいレコードを作成していれる時と 既にあるレコードへの編集なのですが、 新規の時は AddNew を書くだけで 他は同じコードを利用しています。 テキストボックスやコンボボックスの値は入るのですが チェックボックスのTrue、Falseのところで 新規の時だけエラーになります。 編集の時は大丈夫です。 rs.Fields("フィールド名").Value = Form.チェックボックス名.Value と入れているのですが、いけないのでしょうか。 ちなみにDAOで書いていたのを途中でADOに変えています。 rs.Fields!フィールド名= としてもだめでした。 分かる方、お願いします。

  • ADO 英語を含むレコードを抽出したい

    テーブルに保存されてるフィールド1の英語が含まれているレコード(ABC株式会社 など)を抽出したいのですが 方法がわかりません。 *[a-z]* を使うんだなと思いますが、フィルタのかけかたがわかりません。 Sub test() Dim CN As New ADODB.Connection Dim RS As New ADODB.Recordset CN.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ファイル名 RS.Open "テーブル1", CN, adOpenStatic, adLockOptimistic RS.Filter = "フィールド1 = " '←ここをどうすればいいでしょうか? RS.Close: Set RS = Nothing CN.Close: Set CN = Nothing End Sub サンプルを作ってみたのですが ご教示頂けないでしょうか? よろしくお願い致します。

  • オープンしているレコードセットの中の最大値

    VB6でAccess2000です Dim RS As ADODB.Recordset Dim SQL,CN As String RS.Open SQL, CN, adOpenStatic という形で一度オープンしてしまったレコードセットにIDフィールドがあり、その最大値を取得したい場合、どのような方法を用いればいいのでしょうか?

  • レコードセット内容の参照

    レコードセット(rs)のフィールド内容を参照するときに、 msgbox(rs![data1]) msgbox(rs![data2]) msgbox(rs![data3]) ではなく、 For i = 1 to 3 msgbox(rs![data & i]) Next のような事はできないのでしょうか? ※上記だとエラーが出てしまいます。 よろしくお願い致します。

  • INSERT,UPDATEしなかったレコードだけをDELETEしたい

    質問させてください、 CSV形式の10万行のデータをADO経由でINSERT,UPDATEしています そのときUPDATEもINSERTもされなかったレコードをDELETEしているんですが、 今はINSERT,UPDATE処理が終わったあと、全レコードのrecordsetを1レコードずつ csvファイルの1行と比較しています。 他に良い方法はないでしょうか? csvファイルには category, item, price postgresのテーブル名はt_zaikoとして id(INT[NOT_NULL, default_nextval, primary_key]), category(SMALL_INT), item(TEXT), price(SMALL_INT) とします。

  • forループの終了条件の記述方法

    867です。よろしくお願いします。 csvファイルを読み込んで、forループで条件にヒットするものを表示する、というコードを組んでいるのですが、 ----------[OK.php]-------------- // $HotData がCSVファイルを二次元配列に読み込んだものとします。 for($i=sizeof($HotData)-1; ($i>=0)&&($i>=sizeof(HotData)-4); $i--) { 実行する命令 } -------------------------------- では、意図どおり新しいデータ4件(たとえば1,2,3,4)に対し、命令を実行できるのですが、次の4件(たとえば5,6,7,8)に対して別の命令を出したいとき、 -------------NG.php------------- for($i=sizeof($HotData)-1; ($i>=sizeof(HotData)-8)&&($i<=sizeof(HotData)-5); $i--) { 実行する命令 } -------------------------------- とすると、命令を実行することができませんでした。 このような場合、みなさんはどうなさるのでしょうか。 お知恵を拝借願います。

    • 締切済み
    • PHP