• ベストアンサー

削除

削除を作っているのですが、エラーがでて困ってます。 データはACCESSに保存しています。 年月日と登録番号で条件をかけたいのですが、よく分からないのでお願いします。 ソース ' 選択クエリーを作成 strSQL = "Delete From db5 " & " Where 年月日 = '"  & DURIFORM.Text1(0).Text & "'" And "登録番号='"  & DURIFORM.Text1(1).Text & "'" cn.Execute (strSQL) これだと、型が一致しませんとエラーがでました。

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

  • ベストアンサー
  • Watapo3
  • ベストアンサー率76% (33/43)
回答No.3

動作確認はしていませんが、Where条件を括弧でくくってみては如何ですか? また、「AND」は文字列として引き渡しましょう! " Where ((年月日 = '" & DURIFORM.Text1(0).Text & "') And (登録番号 =" & DURIFORM.Text1(1).Text & "))"

GERRARD
質問者

お礼

ありがとうございました。おかけさまで、無事かいけつしました。

その他の回答 (2)

  • MarrowG
  • ベストアンサー率53% (41/76)
回答No.2

登録番号は文字列型ですか? 数値型であれば、 "登録番号=" & DURIFORM.Text1(1).Text のようにシングルクォートは不要です。

GERRARD
質問者

補足

やっぱり、まだ型が一致しませんとでるのですが・・・ ソース全て載せてみました。 Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim strSQL As String Set cn = New ADODB.Connection Set rs = New ADODB.Recordset ' 接続文字列を設定 cn.ConnectionString = _ "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=f:\db\db5.mdb" ' コネクションをオープン cn.Open ' 選択クエリーを作成 strSQL = "Select * From db5" rs.Open strSQL, cn If Not rs.EOF Then ' 選択クエリーを作成 strSQL = "Delete * From db5 " & _ " Where 年月日 = '" & DURIFORM.Text1(0).Text & "'" And "登録番号 =" & DURIFORM.Text1(1).Text cn.Execute (strSQL) End If ' オブジェクトを閉じる cn.Close ' オブジェクトを解放 Set rs = Nothing Set cn = Nothing

  • teppy
  • ベストアンサー率50% (9/18)
回答No.1

>' 選択クエリーを作成 >strSQL = "Delete From db5 " & " Where 年月日 = '"  & DURIFORM.Text1(0).Text & "'" And "登録番号='"  & DURIFORM.Text1(1).Text & "'" 三ヶ所ほど、疑問に思うところがあります SQL(クエリ)は、出力フィールドが必ず必要です >"Delete From ~" これは出力フィールドが指定されていません "Delete"と"From"の間に"*"をいれましょう >"~ From db5 ~" FROM句は、テーブル名を指定するところです (テーブル名だったらすみませんm(_ _)m 問題ありません) >" 年月日 = '"  & DURIFORM.Text1(0).Text & "' ~" この年月日フィールドの型式は文字列型でしょうか? 日付/時刻型でしたら、下記のように記します " 年月日 = #"  & Format(DURIFORM.Text1(0).Text,"mm/dd/yy") & "# ~" 参考になれば...

GERRARD
質問者

補足

この年月日フィールドの型式は文字列型でしょうか そうですね、テキスト型ですね。 でも、まだ型が一致していませんとでるんですけど。・・・

関連するQ&A

  • SQLの同時実行

    SQL文について質問なんですが、下記のようなテーブルがあった場合に『2を3に、3を2にする』というクエリを作ってみましたが、どうもうまくいきません。 ┌─┬──┐ │No│項目│ ├-┼──┤ │1│ああ│ ├─┼──┤ │2│いい│ ├─┼──┤ │3│うう│ └─┴──┘ strSQL1=UPDATE テーブル名 SET No = '2' WHERE No = '3' strSQL2=UPDATE テーブル名 SET No = '3' WHERE No = '2' これをASPから実行する場合は cn.Execute(strSQL1) cn.Execute(strSQL2) とすると、先にstrSQL1が実行されテーブルが更新された後にstrSQL2が実行される ため、 ┌─┬──┐ │No│項目│ ├─┼──┤ │1│ああ│ ├─┼──┤ │3│いい│ ├─┼──┤ │3│うう│ └─┴──┘ となってしまいます。『2つの更新を同時に実行させる』もしくは『2つの更新クエリ1つにする』というようなことはできないものでしょうか?

  • 日別集計(その2)

    DBはアクセス(.mdb)です。 現在のSQL構文ですが、、、 strSQL = "SELECT COUNT (*) From DB1 " strSQL = strSQL & "where 条件その1 = '" & Form1.Text1.Text & "' " strSQL = strSQL & "AND 条件その2 = '" & Form1.Text1.Text & "' " strSQL = strSQL & "AND 日時 BETWEEN #" & (開始日時を格納した変数) & "# AND #" & (終了日時を格納した変数) & "#" strSQL = strSQL & "GOROUP BY CDate(Fix(日時)) " rs.Open strSQL, cn SU = rs.Fields(0).Value という内容です。 これを実行すると”1日目”は取れるのですが、2日目 以降が取れません。単純に「SU = rs.Fields(0).Value」 ではなくWhile等でまわしてやればうまくいくでしょうか? それと、、、これは私も予想外だったのですが(汗)1日 を更に2分割(例:8:30~20:29までと20:30~8:29) しなければなりません。DBの日時フィールドは時刻/日付 型なんですが、これをうまく使ってクエリをもう少し細か なものにしたいのです。 お知恵をお借りしたいと思います。 よろしくお願いします。

  • 【Access2003】クエリで動作するSQLがVBAで動作せず困っています。

    下記のソースを実行したところ、「パラメータが少なすぎます。2を指定してください。」というエラーが表示されました。 エラーが発生する箇所は「db.Execute strsql」です。 しかし、このstrsqlに書かれているSQL文をクエリで実行した所、問題なく動作しました。 なんとなく、クエリでは書けるものの、VBAでは書きない所があるのかなと思ったのですが、どのように修正すればよいか分かりませんでした。 その為、上記の現象について、ご教示いただける方がいらっしゃいましたら、よろしくお願いします。 【VBA】 Private Sub btn_Click() Dim db As DAO.Database Dim ws As DAO.Workspace Dim str As String Set ws = DBEngine.Workspaces(0) Set db = CurrentDb ' トランザクション開始 ws.BeginTrans strsql = "INSERT INTO T_W ( W_DAY )" strsql = strsql & "SELECT T_M.M_DAY" strsql = strsql & " FROM T_M" strsql = strsql & " WHERE (((Left([T_M].[M_DAY],4) & Mid([T_M].[M_DAY],6,2) & Right([T_M].[M_DAY],2))" strsql = strsql & " Between IIf(Nz([Forms]![F_1]![text_str])='',0,[Forms]![F_1]![text_end])" strsql = strsql & " And IIf(Nz([Forms]![F_1]![text_str])='',99999999,[Forms]![F_1]![text_end])))" strsql = strsql & " ORDER BY T_M.M_DAY" db.Execute strsql ws.CommitTrans End Sub 【フォーム:F_1】 テキストボックス:text_str テキストボックス:text_end コマンドボタン:btn 【データベース:T_M】 フィールド名:M_DAY    値  :2001/01/01    値  :2001/01/02    値  :2001/01/03 (以下略) 【データベース:T_W】 フィールド名:W_DAY    値  :なし よろしくお願いします。

  • 「RunSQL」と「Execute」の違い

    アクセスvbaについて 更新クエリを実行するとき DoCmd.RunSQL strSQL cn.Execute strSQL の違いは、 アクションクエリの確認のメッセージボックスを表示するかしないかの違いだけですか? (Executeは確認画面が表示されない)

  • レコードの削除

    VB6.0 ACCESSで開発しています。 t_nyukoテーブルのデータを全て削除するのは下記のように 出来たのですが dataGridに表示されているものを1つ選択し 選択されたものだけ削除したいのですがどうすればいいのでしょうか? よろしくお願いします。 Private Sub Command1_Click() Dim cn As New ADODB.Connection Dim cmd As ADODB.Command Dim cat As New ADODB.Command Dim strSQL As String   Set cn = New ADODB.Connection cn.ConnectionString = _ "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\temp\db2.mdb" cn.Open cat.ActiveConnection = cn strSQL = "DELETE FROM t_nyuko " Set cmd = New ADODB.Command cmd.ActiveConnection = cn cmd.CommandText = strSQL cmd.Execute cn.Close Set cmd = Nothing Set cn = Nothing Set cat = Nothing End Sub

  • 【Access2003】VBAで削除のSQL実行ができない

    初歩的な質問かもしれませんが・・・ ACCESS2003VBAでADOを用いて削除を実行しようとしているのですがエラー(エラーは「オーバーフローしました」です。)が出て実行できません。 ソースは以下の通りです。 Dim strSQL As String Dim rs As New ADODB.Recordset Set cn = CurrentProject.Connection strSQL = " DELETE FROM D_TB" rs.Open strSQL, cn, , adOpenStatic, adLockOptimistic       '←ここでエラー Do Until rs.EOF rs.Delete rs.MoveNext Loop rs.Close cn.Close どこがおかしいのでしょうか? 大変困っています。教えてください。よろしくお願いいたします。

  • SQLとDAOで取得するレコード件数が違う?

    Access2007でSQLで実行した結果と、レコードセットで取得した件数が一致せずに困っています。 いろいろ調べてはみたのですが、なぜかわかりません。 よろしくお願いします。 ○TableA 型 Code1 数値型(主キー) Text テキスト型 Code2 数値型 ○TableA データ Code1 Text Code2 111 AAA 10 112 BBB 15 113 CCC 20 114 DDD 20 ○VBAコード Dim strSQL As String Dim db As DAO.Database Dim rstFind As DAO.Recordset strSQL = "SELECT * FROM TableA Where Code2 = 20" Set db = CurrentDb() Set rstFind = db.OpenRecordset(strSQL, dbOpenSnapshot) MsgBox rstFind.RecordCount この状態でSQLビューから実行すると2件が抽出され、上記VBAを実行するとMsgBoxには「1」と表示されます。

  • ACCESS2000でクエリを抽出条件で抽出

    VBA上でクエリの抽出データを取得してファイルに書き込むというプログラムを書いております。 抽出条件として、今日の日付のレコードを取得したいのですが型が一致しませんとエラーになります。 strSQL = "SELECT * FROM " & (クエリー名)& " where (クエリー.カラム名)='" & Format(Date, "yyyy/mm/dd") & "'" クエリーのカラム名は全角漢字です。 どこがおかしいのでしょうか? よろしくお願いいたします。

  • accessのvbaでの実行時エラーについて

    いつもお世話になっております。 Accessのvbaで下記のコードを実行して、データを 取得したいのですが、OpenRecordsetのところで 「実行時エラー'3615' 式で型が一致しません。」 というエラーがでてしまいます。 ーーーーーーーーーーーーーーーーーーーーーーー Dim db As Database Dim Rec As Recordset Dim strSql As String strSql = "SELECT 入金日 FROM 入金チェック WHERE ID IN(SELECT ID FROM 入居者管理 WHERE 物件名 = '" &  strBukken & "')" Set db = CurrentDb() Set Rec = db.OpenRecordset(strSql) ーーーーーーーーーーーーーーーーーーーーーーー 副問合せのしかたがまずいのか、 どうもよくわかりません。 お手数ですが、お分かりの方がおられましたら ご教示お願いいたします。

  • Insert時に一意制約エラーがでる。

    よろしくお願いします。 VB6.0 DB:ORACLE8.1.6 クライアントWIN2000 サーバーWIN2000SERVER VBでデータをINSERTするプログラムを作ったのですが、どうしても一意制約エラーが出てしまいます。 これはデータの都合上仕方が無いのか? (データの主キーに「.」が入っているのでエラーになるのでしょうか?) プログラムが悪いのか? よろしくお願いします。 エラーは2回目の実行部分です。 データ(すべて文字型) 000   001   002 ベルリン12345 ベルリン 12345 ベルリン123.45 ベルリン 123.45 ベルリン123 45 ベルリン 123 45 プログラム strSql = "Insert Into KUNIBETU(k000,k001,k002) Values ('ベルリン12345','ベルリン,'12345')" '処理のチェック If Execute_sql(strSql) = False Then Err.Raise -1, , "失敗しました!" cn.RollbackTrans rs.Close Set rs = Nothing cn.Close Set cn = Nothing Exit Sub End If strSql = "Insert Into KUNIBETU(k000,k001,k002) Values ('ベルリン1234.5','ベルリン','123.45')" '処理のチェック If Execute_sql(strSql) = False Then Public Function Execute_sql(strSql As String) As Boolean Dim cmd As New ADODB.Command Execute_sql = False ' Commandオブジェクトを作成 Set cmd = New ADODB.Command cmd.ActiveConnection = cn cmd.CommandText = strSql ' アクション クエリーを実行 cmd.Execute      ←←←←←←エラー部分 Set cmd = Nothing Execute_sql = True Exit Function