過去ログ

                                Page     532
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 ▼アクセスからデータを取り出したい。  初心者M 03/1/9(木) 12:40
   ┗Re:アクセスからデータを取り出したい。  yu- 03/1/9(木) 14:23
      ┗ありがとうございました。  初心者M 03/1/11(土) 21:44

 ───────────────────────────────────────
 ■題名 : アクセスからデータを取り出したい。
 ■名前 : 初心者M
 ■日付 : 03/1/9(木) 12:40
 -------------------------------------------------------------------------
   こんにちは。
アクセス初心者(エクセルのほうも・・・)なのですが、よろしくおねがいします。

アクセスからSQL文でデータを取り出したいのですが、レコードの抽出部分で下記のエラーがでてしまいます。

   「実行時エラー 3061 。パラメータが少なすぎます。1を指定してください。」 

パラメータとはクエリとかでつかうものですよね。1はどこに指定しろ、といってるのでしょうか???

それから「ワークスペース」とはなんなんでしょうか?
どう捉えるべきなのでしょうか? (今はただDBを使うための空間かなー?と考えています。。。)
ブックに載っているから、そのまま使ってはいるのですが・・・。

エクセルもアクセスも97バージョンです。
「伝票データ」テーブルの 「摘要」フィールドが「電話代」のレコードをすべて取り出したいのです。


   Dim strname As String
   Dim strfold As String
  
   Dim ws As Workspace
   Dim db As Database
   Dim rst As Recordset
   Dim strsql As String
  
   strfold = ActiveWorkbook.Path
       
   strname = "電話代"
   
 '--▼アクセスに接続--
   Set ws = DBEngine.Workspaces(0)
   
   '指定したデータベースを開く
   strsql = "select 日付 from 伝票データ where 摘要 = " & strname
   Set db = ws.OpenDatabase(strfold & "\伝票97.mdb")
   
   'レコードの抽出
   Set rst = db.OpenRecordset(strsql) ’← ここでエラーストップします。
   
   Do While Not rst.EOF
    Debug.Print rst![日付]
    rst.MoveNext
   Loop
   
   'データベースを閉じる
   db.Close
   
   'オブジェクトを開放
   Set ws = Nothing
   Set db = Nothing
   
 '--▲アクセスに接続--
 ───────────────────────────────────────  ■題名 : Re:アクセスからデータを取り出したい。  ■名前 : yu-  ■日付 : 03/1/9(木) 14:23  -------------------------------------------------------------------------
   ▼初心者M さん:
>   「実行時エラー 3061 。パラメータが少なすぎます。1を指定してください。」 
>
>パラメータとはクエリとかでつかうものですよね。1はどこに指定しろ、といってるのでしょうか???

このエラーがでるのはSQLエラーだと思います。

>   Dim strname As String
>   Dim strfold As String
>  
>   Dim ws As Workspace
>   Dim db As Database
>   Dim rst As Recordset
>   Dim strsql As String
>  
>   strfold = ActiveWorkbook.Path
>       
>   strname = "電話代"
>   
> '--▼アクセスに接続--
>   Set ws = DBEngine.Workspaces(0)
>   
>   '指定したデータベースを開く
>   strsql = "select 日付 from 伝票データ where 摘要 = " & strname

上記の部分を
strsql = "select 日付 from 伝票データ where 摘要 = '" & strname & "'"

にしたらうまくいくような気がしますが(テーブル構成などわからないので確実かわかりませんが)
おそらく摘要というフィールドはテキスト型なので、単純にstrnameを連結させた
だけではSQLでは文字列とは認識してくれません(数値型ならこれOKですが)

ちなみに、検索したい文字列に'を含んでいる場合は

strsql = "select 日付 from 伝票データ where 摘要 = " & """" & strname & """"

とすれば大丈夫です。
 ───────────────────────────────────────  ■題名 : ありがとうございました。  ■名前 : 初心者M  ■日付 : 03/1/11(土) 21:44  -------------------------------------------------------------------------
   ▼yu- さん:
おっしゃるとうり、SQLの文字列関係でした。
ぶじなおりました。
ありがとうございました。これからもよろしくおねがいしまっす。(o^^o)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 532