• ベストアンサー

ACCESS97でSQLを使用して全データを順に取得したい

ACCESS97を使用しています。 あるテーブルAの全データをモジュールを組んで textファイルへ出力したいのです。 1行ずつ取得して 1行ずつ出力する方法でやっています。  この時、1行ずつ取得したいのですが  strSQL = "SELECT * FROM テーブルA ;"  上記内容だと全件取得してしまいます。  1行ずつ 取得する方法はないのでしょうか?  例えば  strSQL = "SELECT * FROM テーブルA WHERE 1行目;"  又は、全件 textファイルに出力するモジュールあるのでしょうか?

  • cdma
  • お礼率36% (91/247)

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

#1の続き。SQL文を使用。旧DOS的Writeステートメント使用。 Sub test01() Dim db As Database Dim rs As Recordset Set db = DBEngine.Workspaces(0).OpenDatabase("db7.mdb") Dim mySQL As String mySQL = "SELECT * FROM マンション WHERE 販売=TRUE" Set rs = db.OpenRecordset(mySQL, dbOpenDynaset) Open "テキストF.txt" For Output As #1 rs.MoveFirst While Not rs.EOF '------------ ' MsgBox rs!マンション Write #1, rs!マンション, rs!戸数, rs!販売 '----------- rs.MoveNext Wend '---- rs.Close Close #1 End Sub

その他の回答 (2)

回答No.2

お疲れ様です >1行ずつ 取得する方法はないのでしょうか? レコードセットを取得したら、Do ~ Loop 文でまわせばできます。 >又は、全件 textファイルに出力するモジュールあるのでしょうか? DocmdオブジェクトのOutputを使用すればできます。 DoCmd.OutputTo acOutputQuery, クエリ名, acFormatTXT, "C:\AAA.txt", True 参考になれば...

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

SQLを習ったからSQLばっかりに頭が言っていませんか。テーブル1-->テーブル2はSQLの利用でいいのですが、ビジネスでは、テーブル2のレコード明細を1つづつ捉える必要があるのが、ほとんどではないですか。 一番ローテク(DAO)で、下記を紹介います。 「マンション」テーブルは「マンション名」「戸数」「 販売」の3フィールドあり、「販売」はYES/NO型のチェックが入っています。入っているものだけ、「テキストF」に書き出しました。メモ帳で空白の「テキストF.txt」を 作っておいて、実行してください。 Option Compare Database Option Explicit Sub test01() Dim db As Database Dim rs As Recordset Set db = CurrentDb Set rs = db.OpenRecordset("マンション", dbOpenDynaset) Open "テキストF.txt" For Output As #1 rs.MoveFirst While Not rs.EOF '------------ If rs!販売 = True Then MsgBox rs!マンション Write #1, rs!マンション, rs!戸数, rs!販売 End If '----------- rs.MoveNext Wend '---- rs.Close Close #1 End Sub IFのところを組めば簡単な条件ならこのほうが易しい。 SQL文で抽出したテーブルをレコードとして扱う方法は別途。

関連するQ&A

  • ACCESS97 のモジュールの中 何番目かの データを取得したい

    ACCESS97 のモジュールの中で SQLを使用しています。 SQLを使用して あるテーブルの任意のレコードを選択したいのです。 例えば テーブルAが下記のようにあるとします。 項目 名前 番号 A 001 B 003 D 004 という場合に名前Bの番号003を取得したいのです。 データとしては、"2"番目の2 は取得可能です。  (フォーム上のテキストBOXで入力) Set DATABASE = CurrentDb() strSQL = "SELECT * FROM テーブルA WHERE " strSQL = strSQL + "**** = '" & **** & "' ;"     ↑ここに条件をどのように持てばいいのでしょうか? ※ ここで、名前の項目ではキーとなる項目は得られません。   今回は 何番目のデータを取得したい ということが可能かどうか    教えて頂きたいと思います。

  • Access VBAからcsvの出力について

    Access VBAからcsvの出力について Select * into csvファイル From テーブル名 Where ••• Where句なし、全件ではちゃんと出力できるのですが、 Where句ありだと0件になってしまいます。 Where句指定はできないのでしょうか? よい方法があれば教えてくださいm(._.)m 環境はフロントAccess ,DBはSQL server バッチでの出力も試みましたが、 Serverがあるフォルダにアクセス権限がないため、 断念しました。

  • ACCESSのSQLの書き方

    ACCESSでのSQL文の書き方を教えてください。 テーブルtbl_Aとテーブルtbl_Bがあり, tbl_Aで得られた数値とtbl_Bで得られた数値を加えたものを結果として表示します。 どう書けばよろしいのでしょうか。どうしてもエラーになってしまいます。 イメージとしてはこんな感じです。 select (select ~~ from tbl_A where ~~)+(select ~~ from tbl_B where ~~) (もしoracleならば,「from dual」というのを最後に付けるんですが。)

  • access2007 VBA データの抽出SQLがわかりません。

    access2007 VBA データの抽出SQLがわかりません。 下記のように記述しているのですが、Aテーブルから必要なデータが抽出できません。どなたかご教授いただけますか。 ※ 「Me.txtSEQ前.Value」「Me.txtSEQ後.Value」はテキストコントロールです。プロパティでの書式設定は何もしていません。 ========================================= Dim intSEQ前 As Long Dim intSEQ後 As Long 'テキストコントロールなので、数値型にする。 '分かりやすくするために、ここで定義しています。 intSEQ前 = CLng(Me.txtSEQ前.Value) intSEQ後 = CLng(Me.txtSEQ後.Value) 'データを抽出します 'intSEQ前からintSEQ後に入力された数値を抽出する。 strSQL = "SELECT " strSQL = strSQL & "* " strSQL = strSQL & "FROM Aテーブル " strSQL = strSQL & "WHERE 県コード=1 " strSQL = strSQL & "AND (SEQ >= intSEQ前 OR SEQ <= intSEQ後) " strSQL = strSQL & "ORDER BY SEQ " Set objRs = myDB.OpenRecordset(strSQL, dbOpenSnapshot) ※下記をコメントアウトするとデータは正しく抽出されているようです。 strSQL = strSQL & "AND (SEQ >= intSEQ前 OR SEQ <= intSEQ後) " 以上。よろしくお願い致します。

  • SQL文でのデータの取得が上手くいきません

    初めて質問させていただきます。 こちらのカテゴリで良いのか分からなかったのですが、よろしくお願いいたします。 SQL文を作成しているのですが、上手くいかず困っている状況です。 要件としてはテーブルAにユーザーの情報が格納されているのですが、 キーの一つとして世代(SEDAI_NO)(日付)を持っております。 今回取り出したいデータは該当ユーザーの処理日以前の最新のデータを 取得したいと思い以下のSQL文を作成しましたが、上手く行かず、最新世代を含むそれ以前の世代のデータを取得してきています。 どこがおかしいのでしょうか? よろしくお願いいたします。 【作成したSQL】 select * from テーブルA テーブルA’ where (USER_ID=該当のユーザーID) and (SEDAI_NO = (select max(SEDAI_NO) from テーブルA where SEDAI_NO = テーブルA’.SEDAI_NO AND 処理日 >= テーブルA'.SEDAI_NO)

  • SQL 取得した値について

    力を貸してください。 教えてください。 (1)SELECT 項目1 FROM 表 (2)SELECT 項目2 FROM 表2   WHERE = A <> 「(1)で取得した項目1」 ※(1)で取得した値を(2)のWHERE句の条件で使用したいのですが、 どの方法であればよろしいでしょうか? 回答の方をお願いします。

  • SQL得意な方

    仕事で困っています、 なにとぞお力添えを。 テーブル1から、TOP50 でaとbを表示させたいのです。 で、その際の条件として、 開始するレコードも指定したいのです。 下記SQLの[○]の部分に50が入っていたら、 51~100件を表示する、と、いうような。 SELECT TOP 50 a,b FROM テーブル1 WHERE c='1' AND a >= '' AND a NOT IN ( SELECT TOP 〇 a FROM テーブル1) ORDER BY a で、順調だったのですが、WHERE条件が なんだか怪しいらしく、 a >= ''の時だけはきちんと動くのですが、 ANDでc='1'をつけた所、普通に全件表示されてしまいます。 [ちゃんと51件目から100件目を表示するSQL] SELECT TOP 50 a,b FROM テーブル1 WHERE a >= '' AND a NOT IN ( SELECT TOP 〇 a FROM テーブル1) ORDER BY a [何故か全件表示になるSQL] SELECT TOP 50 a,b FROM テーブル1 WHERE c='1' AND a >= '' AND a NOT IN ( SELECT TOP 〇 a FROM テーブル1) ORDER BY a ※[何故かNOT IN (~)の部分がまったく働いていない] どうしてなのでしょう?。 解りにくい質問で大変申し訳ないのですが どなたかご教授いただけないでしょうか。

  • 重複レコードを高速で取得するSQL

    Access(mdb)から約2万件レコードのあるテーブルがあるとします。 列数は20ほど。 その中から、3つの列において重複しているレコードを取得したいのですが、 高速に取得する方法はありますでしょうか? (VB.NETで、重複レコードをユーザーに示す処理を作成したいのです) 以下のSQLを試したところ、1分以上時間がかかってしまいました。 ----------------------------- SELECT * FROM テーブルA table1 WHERE EXISTS ( SELECT * FROM テーブルA table2 WHERE table1.列A = table2.列A   table1.列B = table2.列B   table1.列C = table2.列C GROUP BY table2.列A HAVING COUNT(table2.列A) > 1 ) ----------------------------- アドバイスをお願いします。

  • Access VBA SQL文で教えてください

    strSQL = "SELECT 日付,ブロック_cd,時刻 FROM テーブルA" strSQL = strSQL & " WHERE 日付 = " & Me.売上日 & "" strSQL = strSQL & " AND ブロック_cd = & Me.cmb_ブロック & " strSQL = strSQL & " AND 時刻 = & Me.時刻 & " WHERE句以下を削除するとレコードを読み込んできます。 よって、WHERE句がおかしいようです。 テーブルA: 日付:日付/時刻型(yyyy/mm/dd) ブロック_cd:数値型 時刻:日付/時刻型(hh:nn) me.売上日:日付形式(yyyy/mm/dd) me.cmb_ブロック:コンボボックスの値(数値) me.時刻:時刻形式(hh:nn) おそらく、me.のくくり方がおかしいとは思うのですが どのように修正すればよろしいでしょうか? よろしくお願いします。

  • 異なるテーブルから一括でデータを取得したい

    異なるテーブルから一括でデータを取得したいと思っています。 現在思いつくのはunionによる結合なのですが、いささかぶさいくではないか?と思ってます。 select a,b,c from x1,y,z where A union select a,b,c from x2,y,z where A ・・・ 上記のように、x1,x2が一定の数字でいくつも対象となります。 fromにはワイルドカードが使えないので、どのようにしたものかと悩んでおります。 ※selectで取得するカラム名は全テーブル同一で、検索条件も同一です。 unionがあるべき姿なのでしょうか?

専門家に質問してみよう