更新クエリの抽出条件について

このQ&Aのポイント
  • 更新クエリに抽出条件「FileNameと区分が空白の場合」を追加したいが、何も更新されなくなってしまう
  • 抽出条件をUPDATE句の続きに「& "where File Name = "" & 区分 = "" "」と追加したが、うまくいかない
  • アドバイスがあればお願いします
回答を見る
  • ベストアンサー

更新クエリ 複数の抽出条件の書き方

いつもアドバイスありがとうございます。 表題の通り、下記コード(一部)で更新クエリをかけてますが、 抽出条件として、「FileNameと区分が空白の場合」という抽出条件を付け加えたいです。 色々調べてみたのですが、 UPDATE句の続きに、「& "where File Name = "" & 区分 = "" "」 をつけたのですが、これをつけると何も更新されなくなってしまいます。 何かアドバイスがあればお願いします。 Name1 = TName & ".csv" Name2 = Left(TName, Len(TName) - 5) ret = MsgBox(Name1 & "をFileName ・ " & Name2 & "を区分に追加しますか?", vbYesNo + vbQuestion, "インポート確認") Dim sql1 As String sql1 = "Update T_Mas SET FileName = '" & Name1 & "',区分 = '" & Name2 & "'" DoCmd.RunSQL sql1

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

  • ベストアンサー
  • root139
  • ベストアンサー率60% (488/809)
回答No.1

何のDBMSをお使いなのか分からないので一般的なSQLとして考えますと、付け加えたWHERE句は下記の点が怪しいかと。 ・File と Name の間にスペースが入っている。 ・条件を「&」で繋げている。(WHERE句では「AND」で繋げるのが標準) ・空文字列を""で表現している。  ホスト言語(VBでしょうか?)の文字列が分割されているだけで、生成されるSQLに""が入る訳ではないです。  また、SQLとしても文字列リテラルには単一引用符(')を使うのがより一般的かと。 したがって、下記の様なコードを追加されてはどうでしょう? 「& " WHERE FileName = '' AND 区分 = '' "」

関連するQ&A

  • 更新クエリで変数は使えない?

    下記、コードの一部分です。 Name1をFileNameに、 Name2を区分に入れたいです。 メッセージボックスより、Name1・Name2に入れたい値が入っているのは確認できてますが、 実行させると、メッセージボックスが出た後、 パラメーターボックスが出てきて、Name1?Name2?と値を聞いてきます。 そこに、値を挿入すると更新はされるものの、パラメーターボックスで入力せず、それぞれに入っている値をそのまま入れたいです。 可能でしょうか? Name1 = TName & ".csv" Name2 = Left(TName, Len(TName) - 5) ret = MsgBox(Name1 & "をFileName ・ " & Name2 & "を区分に追加しますか?", vbYesNo + vbQuestion, "インポート確認") Dim sql1 As String sql1 = "Update T_Mas SET FileName = Name1,区分 = Name2 " DoCmd.RunSQL sql1

  • ACCESS VBA CSVのインポート ファイル名指定→ファイル名選択

    現在、テキストボックスにファイル名を入れるとCSVファイルがインポートされ、テキストボックスに入れたファイル名からACCESSのテーブルにFileNameの項目の追加、書き込み等ができるプログラムを作りました。 ですが、このプログラムを根本的に修正してほしいとの事で、困ってます。 テキストボックスにファイル名を入れるのではなく、指定のフォルダからファイル名を複数選択し、まとめてインポートしたいという事でした。 この場合だと、プログラム自体がまったく変わりますよね? FileNameの追加等は不可能ではないでしょうか? 現在のプログラムを記載しますので、どこを修正すればいいかアドバイスお願いします。 Private Sub Cmd_01_Click() Dim ercd As Integer Dim LsName As String Dim TName As String Dim ITName As String Dim Name1 As String Dim Name2 As String Dim teigi As String Dim SQL As String Dim aa As Long Dim mySQL As String Dim db As Database If Nz(Me.txt_01) = "" Then MsgBox "インポートするファイル名を入力して下さい", vbOKOnly, "エラー" Me.txt_01.SetFocus Exit Sub End If 'ファイル名の取得 strError = 0 LsName = "\\St1\第2業務部\$運用\1010030 アールジービー\業務\RGB一時作業ファイル\なるには不備チェック\TESTkanno\" TName = Me.txt_01 LsName = LsName & TName & ".csv" ITName = "T_Mas" 'インポートの確認 ret = MsgBox(TName & "をインポートしますか?", vbYesNo + vbQuestion, "インポート確認") If ret = vbNo Then Exit Sub End If Debug.Print LsName 'レコードの追加 teigi = "RGB定義" DoCmd.TransferText acImportDelim, teigi, ITName, LsName, True ret = MsgBox(TName & "をマスターに追加しますか?", vbYesNo + vbQuestion, "インポート確認") If ret = vbNo Then Exit Sub End If SQL = "INSERT INTO T_Mas (ID1,ID,処理状況,請求日,学校識別コード,学校名,学校分類名,メールアドレス,名前,ふりがな,性別,生年月日,職業,高校所在地,高校名,学年,郵便番号,都道府県,区市町村&町域,番地以下,電話番号,FileName,区分,不備,不備理由,yu,gid,保留,処理済,件数報告日,納品日 )" & _ " SELECT [" & TName & "].[ID1], [" & TName & "].[ID],[" & TName & "].[処理状況], [" & TName & "].[請求日]," & _ " [" & TName & "].[学校識別コード], [" & TName & "].[学校名], [" & TName & "].[学校分類名], [" & TName & "].[メールアドレス]," & _ " [" & TName & "].[名前], [" & TName & "].[ふりがな], [" & TName & "].[性別], [" & TName & "].[生年月日]," & _ " [" & TName & "].[職業], [" & TName & "].[高校所在地], [" & TName & "].[高校名], [" & TName & "].[学年]," & _ " [" & TName & "].[郵便番号], [" & TName & "].[都道府県], [" & TName & "].[区市町村&町域], [" & TName & "].[番地以下]," & _ " [" & TName & "].[電話番号], [" & TName & "].[FileName], [" & TName & "].[区分], [" & TName & "].[不備], [" & TName & "].[不備理由], [" & TName & "].[yu], [" & TName & "].[gid]," & _ " [" & TName & "].[保留], [" & TName & "].[処理済], [" & TName & "].[件数報告日],[" & TName & "].[納品日], From" & "LsName" Debug.Print SQL Name1 = TName & ".csv" Name2 = Left(TName, Len(TName) - 5) ret = MsgBox(Name1 & "を FileName、" & Name2 & "を 区分に追加しますか?", vbYesNo + vbQuestion, "インポート確認") Dim sql1 As String sql1 = "Update T_Mas SET FileName = '" & Name1 & "',区分 = '" & Name2 & "'" & " WHERE FileName Is Null AND 区分 Is Null" DoCmd.RunSQL sql1 End Sub

  • リストボックス 複数選択の場合の値取得

    ACCESS2003を使用しています。 今、下記のプログラムにて リストボックスからファイル名を選び CSVをインポートさせ、更に選択したファイル名を新しいフィールドに書き込みをする。というシステムを作っています。 現在のプログラムですと、一つを選択した場合はうまく書き込めます。 ですが、複数同時選択する事はできますでしょうか? 長くて見づらいプログラムですが、参考までに掲載します。 よろしくお願いします。 Private Sub Form_Load() Dim oFSO As Object Dim oFile As Object Dim sTmp As String Const FolderPath = "\\St1\第2業務部\$運用\TESTkanno" sTmp = "" Set oFSO = CreateObject("Scripting.FileSystemObject") For Each oFile In oFSO.GetFolder(FolderPath).files If (Right(oFile.Name, 3) = "csv") Then sTmp = sTmp & ";" & Left(oFile.Name, InStr(oFile.Name, ".") - 1) End If Next If (Len(sTmp) > 0) Then sTmp = Mid(sTmp, 2) End If Me.lst_01.RowSource = sTmp 'Me.lst_01 = Null Set oFSO = Nothing End Sub Private Sub Cmd_01_Click() Dim ercd As Integer Dim LsName As String Dim TName As String Dim ITName As String Dim Name1 As String Dim Name2 As String Dim teigi As String Dim SQL As String Dim aa As Long Dim mySQL As String Dim db As Database Dim i As Integer Dim varData As Variant Dim strSelected As String strSelected = vbNullString With lst_01 For Each varData In .ItemsSelected strSelected = strSelected & .ItemData(varData - 1) & " " Next End With 'ファイル名の取得 strError = 0 LsName = "\\St1\第2業務部\$運用\TESTkanno\" TName = Left(strSelected, Len(strSelected) - 1) LsName = LsName & TName & ".csv" ITName = "T_Mas" 'レコードの追加 teigi = "RGB定義" DoCmd.TransferText acImportDelim, teigi, ITName, LsName, True SQL = "INSERT INTO T_Mas (ID1,ID,処理状況,請求日,学校識別コード,学校名,学校分類名,メールアドレス,名前,ふりがな,性別,生年月日,職業,高校所在地,高校名,学年,郵便番号,都道府県,区市町村&町域,番地以下,電話番号,FileName,区分,不備,不備理由,yu,gid,保留,処理済,件数報告日,納品日 )" & _ " SELECT [" & TName & "].[ID1], [" & TName & "].[ID],[" & TName & "].[処理状況], [" & TName & "].[請求日]," & _ " [" & TName & "].[学校識別コード], [" & TName & "].[学校名], [" & TName & "].[学校分類名], [" & TName & "].[メールアドレス]," & _ " [" & TName & "].[名前], [" & TName & "].[ふりがな], [" & TName & "].[性別], [" & TName & "].[生年月日]," & _ " [" & TName & "].[職業], [" & TName & "].[高校所在地], [" & TName & "].[高校名], [" & TName & "].[学年]," & _ " [" & TName & "].[郵便番号], [" & TName & "].[都道府県], [" & TName & "].[区市町村&町域], [" & TName & "].[番地以下]," & _ " [" & TName & "].[電話番号], [" & TName & "].[FileName], [" & TName & "].[区分], [" & TName & "].[不備], [" & TName & "].[不備理由], [" & TName & "].[yu], [" & TName & "].[gid]," & _ " [" & TName & "].[保留], [" & TName & "].[処理済], [" & TName & "].[件数報告日],[" & TName & "].[納品日], From" & "LsName" Name1 = TName & ".csv" Name2 = Left(TName, Len(TName) - 5) ret = MsgBox(Name1 & "を FileName、" & Name2 & "を 区分に追加しますか?", vbYesNo + vbQuestion, "インポート確認") Dim sql1 As String sql1 = "Update T_Mas SET FileName = '" & Name1 & "',区分 = '" & Name2 & "'" & " WHERE FileName Is Null AND 区分 Is Null" DoCmd.RunSQL sql1 End Sub

  • ACCESSでVBAから選択クエリの抽出条件を指定したい

    選択クエリの抽出条件はデザインビューの「抽出条件」欄に直接条件式を書き込むのが普通だと思いますが、この条件式をVBAで記述することは出来るでしょうか? DoCmd.RunSQL ではアクションクエリしか実行できないようだし、 DoCmsOpenQuery では引数に抽出条件を指定することが出来ないし困っています。

  • エクセルからアクセスの更新クエリをVBAで実行することは可能ですか?

    SQL = "UPDATE ~WHERE ;" DoCmd.RunSQL SQL をエクセルのコマンドボタンから実行させたいのですが どのような処理が必要でしょうか? よろしくお願いします。

  • CSVファイルのインポート

    辞めた人のプログラムを書き換えています。 初心者なもので、あまりコードを理解しておりませんが、 一応できるところまで直してみました。 CSVファイルをアクセスにインポート、その後項目(FileName)を追加し、CSVのファイル名を追加した項目にいれたいです。 下記構文で、インポートまではできましたが 最後の方の dbs.Execute sql でエラーになります。 ここをクリアするにはどこを修正すればよろしいでしょうか? アクセスは2003です。 Private Sub Cmd_01_Click() Dim ercd As Integer Dim dbs As adodb.Connection Dim LsName As String Dim TName As String Dim Name1 As String Dim teigi As String Set dbs = CurrentProject.Connection If Nz(Me.txt_01) = "" Then MsgBox "インポートするファイル名を入力して下さい", vbOKOnly, "エラー" Me.txt_01.SetFocus Exit Sub End If 'ファイル名の取得 strError = 0 LsName = "\\St1\第2業務部\$運用\1010030 アールジービー\業務\RGB一時作業ファイル\なるには不備チェック\TESTkanno\" TName = Me.txt_01 LsName = LsName & TName & ".csv" 'インポートの確認 ret = MsgBox(TName & "をインポートしますか?", vbYesNo + vbQuestion, "インポート確認") If ret = vbNo Then Exit Sub End If Debug.Print LsName 'レコードの追加 teigi = "RGB定義" DoCmd.TransferText acImportDelim, teigi, TName, LsName, False, "" ret = MsgBox(TName & "をマスターに追加しますか?", vbYesNo + vbQuestion, "インポート確認") If ret = vbNo Then Exit Sub End If Call FileTuika End Sub Sub FileTuika() Dim sql As String Dim aa As Long sql = "INSERT INTO T_Mas (処理状況,請求日,学校識別コード,学校名,学校分類名,メールアドレス,名前,ふりがな,性別,生年月日,職業,高校所在地,高校名,学年,郵便番号,都道府県,区市町村&町域,番地以下,電話番号,FileName,区分,不備,不備理由,yu,gid,保留,処理済,件数報告日,納品日 )" & _ " SELECT [" & T_Mas & "].[処理状況], [" & T_Mas & "].[請求日]," & _ " [" & T_Mas & "].[学校識別コード], [" & T_Mas & "].[学校名], [" & T_Mas & "].[学校分類名], [" & T_Mas & "].[メールアドレス]," & _ " [" & T_Mas & "].[名前], [" & T_Mas & "].[ふりがな], [" & T_Mas & "].[性別], [" & T_Mas & "].[生年月日]," & _ " [" & T_Mas & "].[職業], [" & T_Mas & "].[高校所在地], [" & T_Mas & "].[高校名], [" & T_Mas & "].[学年]," & _ " [" & T_Mas & "].[郵便番号], [" & T_Mas & "].[都道府県], [" & T_Mas & "].[区市町村&町域], [" & T_Mas & "].[番地以下]," & _ " [" & T_Mas & "].[電話番号], '" & LsName & "'," & FileName & " From" & "LsName" Debug.Print sql dbs.Execute sql dbs.Close Set dbs = CurrentDb() With dbs For Each tdfa In .TableDefs If tdfa.Name = TName Then dbs.TableDefs.Delete tdfa.Name End If Next tdfa End With dbs.Close End Sub

  • アクションクエリ DoCmd.RunSQL 0件なら

    UPDATE~のSQL文をVBAの「DoCmd.RunSQL」で実行すると 「○件のレコードが更新されます。」 と表示されます。 この時 0件なら違う動作をしたいのですが 件数を取得することは可能でしょうか? 「IF O件 Then~」 と言うのは可能でしょうか。 ご教授よろしくお願いします。

  • 「・」中点が入った文字列を条件にするとデータを抽出できないです

    「・」中点が入った文字列を条件にすると データを抽出できないです。 うまくいかない例 ------------------------------------------- $name = "春・春・春"; $Sql = "SELECT * FROM TestList"; $Sql .= " WHERE SpName = '".$name."'"; ------------------------------------------- 条件を変数に格納してSQL文に渡すと何も抽出できません。 しかし↓のようにSQLに直に「春・春・春」とすると うまくデータが抽出されます。 うまくいった例 ------------------------------------------- $Sql = "SELECT * FROM TestList"; $Sql .= " WHERE SpName = '春・春・春'"; ------------------------------------------- また「・」中点がない条件では変数で渡しても データがうまく抽出されます。 どうしたら「・」中点が入っている条件を 変数に格納してSQLに渡しても うまくデータが抽出されるでしょうか? どなたかご教示いただけますと助かります。 よろしくお願いします。

  • updateで複数行更新したい

    OracleのSQLについて質問があります。 UPDATE文を1度しか使わずに、抽出条件の異なるデータを複数個更新することは可能ですが? 例えば、 テーブル名:TEST カラム: A B C D UPDATE A B C D 100 010 350 300 → 100 010 200 250 100 020 350 000 → 100 020 200 280 という感じで更新したいのですが、どんなUPDATE文を組み立てればいいのか思いつきません。 なので、何かきっかけになるようなことでも構いませんので、教えてください。 よろしくお願いします。

  • access の UPDATE のSQL文教えてください

    お世話になります。 仕訳抽出 (キー無し)の勘定科目別の金額を勘定科目毎に集計して仕訳集計(キー項目:勘定科目)の金額を更新するSQL文です。 1つ目はOK ですが 2つ目で「構文エラー:演算子がありません」となります。 DoCmd.RunSQL "UPDATE 仕訳集計 set 金額=0 " DoCmd.RunSQL "UPDATE 仕訳集計 " _ & " INNER JOIN 仕訳抽出 ON 仕訳集計.勘定科目 = 仕訳抽出.勘定科目" _ & " SET 仕訳集計.金額 = SUM(仕訳抽出.金額) Group by 仕訳抽出.勘定科目;"