命令文の分割方法と時刻・日付項目の扱いについて

このQ&Aのポイント
  • 質問者は、長い命令文を画面内に表示できるように分割したいと考えています。
  • また、時刻項目と日付項目が文字列または分数式として扱われることについても疑問を持っています。
  • 質問者は、具体的な分割方法や時刻・日付項目の扱い方についてアドバイスを求めています。
回答を見る
  • ベストアンサー

命令文が長文になります 行を分割入力出来ますか

何度もお世話になります。 QNo.3140739 の続きです。 以下はレコード挿入のルーチンです Function 介護メモ挿入() on Error GoTo レコード挿入_Err DoCmd.SetWarnings False DoCmd.RunSQL "insert into 介護メモ (利用者,介護日,身体単位,生活単位,開始時刻,年月) values (利用者 , 日付 , 身体単位 , 生活単位 , 開始時刻,年月)", -1 DoCmd.SetWarnings True レコード挿入_Exit: Exit Function レコード挿入_Err: MsgBox Error$ Resume レコード挿入_Exit End Function これで実行は出来たのですが、文中の介護メモは実際にはフィールド数が38ある介護記録というテーブルです。長い命令文になります。 画面内に表示できるように命令文の分割をしたいのですが 以下のように変更したのですが「クエリ式'11:00:00'の構文エラー」と時刻項目は文字列扱いのようです 同様に日付項目は分数式扱い? Function 介護メモ挿入() DIM SQL文 as String SQL文 = "insert into 介護メモ (利用者,介護日,身体単位,生活単位,開始時刻,年月) values (" SQL文 = SQL文 & """" & 利用者 & """," & 日付 & "," & 身体単位 & "," & 生活単位 & "," & 開始時刻 SQL文 = SQL文 & "," & 年月 & ")" On Error GoTo レコード挿入_Err DoCmd.SetWarnings False DoCmd.RunSQL SQL文, -1 DoCmd.SetWarnings True レコード挿入_Exit: Exit Function レコード挿入_Err: MsgBox Error$ Resume レコード挿入_Exit End Function

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

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.1

> SQL文 = SQL文 & """" & 利用者 & """," & 日付 & "," & 身体単位 & "," & 生活単位 & "," & 開始時刻 ここは、 「SQL文 = SQL文 & "利用者,日付,身体単位,生活単位,開始時刻"」 でよいはずです。 「利用者」等が文字列型なのに対し、「日付」は日付型だということで 「ダブルクォーテーション(")では括らない」と思われたのだと思いますが、 これだと「日付」コントロールの値が参照されるため、ご質問のようなエラーに なったものと思います。 (ご質問中の形だと、「~values (利用者,11:00:00,~」といった形のSQL文に  なってしまいます) 試しに、SQL実行前に「MsgBox SQL文」という命令を入れておけば、SQL文が正しく 作成されているかどうか確認できます。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ また、改行の方法としては、ご質問中のように分割するほかに、 「SQL文 = "insert into 介護メモ (利用者,介護日,身体単位,生活単位,開始時刻,年月)" _   & " values (利用者 , 日付 , 身体単位 , 生活単位 , 開始時刻,年月)"」 というように、「_」(アンダーバー)を使って改行を挿入する方法もありますので、 参考までに。 (文字列とアンダーバーの間には、「 」(スペース)が必要) なお、改行挿入時には、元の文にあったスペースを入れ忘れがちですが(私が(汗))、 以下のような手順を踏むと、間違いにくくなるかと思います; 「"~年月) values ~"」(分割前のSQL文) →「"~年月)"" values ~"」(この時点ではエラー発生) →「"~年月)" & " values ~"」(SQL文の分割終了) →「"~年月)" _& " values ~"」(この時点ではエラー発生) →「"~年月)" _     & " values ~"」(改行の挿入終了)  *改行後の「&」の前には、スペースやTabが任意の数だけ   入れられますので、見やすいように調整できます。

shinkami
質問者

お礼

ご回答感謝します 最初仰るとおり「SQL文 = SQL文 & "利用者,日付,身体単位,生活単位,開始時刻"」 としたのですが日付以下はテキストデータと処理してくれますが利用者だけは文字列? このままのレコードに書き込まれました。丁寧に見直せば間違いに気づいたかも 改行は _と&で9行に分解できました。 「」はACCESS2000で不用のようです。おかげで見直し訂正が楽になりました。

関連するQ&A

  • accessの SQL文 INSERT命令

    次のような命令文でを実行すると [INSERT INTOステートメントの構文エラーです。] と エラーメッセージがかえってきます。 文中 介護メモはテーブル名、()内の項目名はフォーム上に定義したテキスト項目名です。テーブルのフィールドは()内のほかデータ型がオートナンバー形式のIDが定義されています。 DoCmd.RunSQL "insert into 介護メモ value(,利用者,日付,身体単位,生活単位,開始時刻)", -1

  • Docmd.RunSQL 文で 追加時の確認メッセージの省略出来ますか

    QNo.3140739,QNo.3141094の追加質問です。 テーブルへ追加書き込み処理に DoCmd.RunSQL "insert into 介護メモ values(ID,利用者,日付,身体単位,生活単位,開始時刻)", 0 としましたところ、確認メッセージが出て,OKをクリックすると書き込んでくれるのですが、一度に2000件前後のデータを追加します。 この確認メッセージを省略する方法を教えてください

  • ACCESS VBA 追加貼り付けが無効

    アクセスのVBAでエクセルのデータを編集してテーブルに追加貼り付けをしたいのですが、「追加貼り付けは無効」とポップアップが表示されてうまくいきません。 追加貼り付けのFunctionを呼び出す前のエクセルのRangeをコピーした段階で手動でテーブルに追加貼り付けをすると、追加貼り付けをします。 追加貼り付けのコードは下記のとおりですが、どこを修正すればよろしいでしょうか。 Function 追加貼り付け() On Error GoTo 追加貼り付け_Err 'この下の行のacEditをacAddに変えても、追加貼り付けは無効でした。 DoCmd.OpenTable "読み込み", acNormal, acEdit DoCmd.RunCommand acCmdPasteAppend '追加貼り付けする際に出てくるアラーム解除はこの下の行でよいのではないでしょうか。 DoCmd.SetWarnings False 追加貼り付け_Exit: Exit Function 追加貼り付け_Err: MsgBox Error$ Resume 追加貼り付け_Exit End Function

  • VBとアクセスでSQL文に変数を使いたいのですが

    したいことはレコードの挿入をSQL文で変数を使用して処理したいのですがうまく動作してくれません StrSQL_1 = _ "insert into 行先情報テーブル (社員ID, 行先, 帰社予定時刻, 備考)" & _ "values (7,'(変数1)','(変数2)','(変数3)')" 変数の部分が置き換わりません、いろいろ調べてみたのですがどうもわかりませんvaluesでは変数を使えないのでしょうか? もしそうだとするとどのようにすればレコードを挿入するSQL文で変数を利用できるのかをおしえていただけないでしょうか

  • 関数内でのSQL文実行→エラー検知されない・・・。

    いつもお世話になってます。 sasakidと申します。 現在、ASPで開発を進めています。 エラーが発生したらエラーページに飛ぶように適所に 以下の文を入れています。 '------エラー処理-------- If Err.Number <> 0 Then  Call goto_ErrPage() ←…エラーページに飛ぶ関数 End If ほとんどの個所でエラーページに飛ぶことを確認しました。 今、困っていることはSQL文を実行する関数内で SQL文にエラーがあったとしてもどうやらエラーが検知されていないようなのです。 '=====SQL文実行関数=========== Function exeSql1(sql) exeSql1 = -1 'エラーセット sql = sql & "ORDER BY test" '←…エラーが出るように追加    Set rs = db.Execute(sql) If Err.Number <> 0 Then Set rs = Nothing Exit Function End If (中略) exeSql1 = 0 End Function '======本文================== (中略)   tmp = exeSql1(sql) If tmp <> 0 Then '戻り値がエラー(0以外)だったらエラー画面へ Call goto_ErrPage() ←…エラーページに飛ぶ関数 End If (後略) ------------------------- どんなに関数:exeSql1で実行されるSQL文にエラーを含めてもエラーページに飛びません。 本文中で実行しているSQL文にエラーが含んでいるとエラーページに飛ぶのですが・・・。 こんな現象の原因などわかる方がいらっしゃいましたら教えてください!!! よろしくお願いします。     

  • アクセスのVBAについて、フォームの On Error Goto についておしえてください。

    Private Sub cmd次_Click() On Error GoTo Err DoCmd.GoToRecord , , acNext Exit_Click: Exit Sub Err: MsgBox "この先にレコードがなくなると、ここをつうかするのだろうか。" Resume Exit_Click End Sub 一連の流れについて,ご解説ください。よろしくお願いいたします。

  • アクセスで複数データ削除

    myPath = "D:\" myfilename = Dir(TxB04) Do Until myfilename = "" DoCmd.TransferText acImportDelim, , "tbl1", myPath & myfilename, False myfilename = Dir Loop MsgBox "取込が正常に終了しました。" MsgBox "二重打刻をチェックしてます。" '取込ファイル名を変換します。 DoCmd.SetWarnings False DoCmd.OpenQuery "データ変換" DoCmd.OpenQuery "実績追加" DoCmd.OpenQuery "重複データ削除" DoCmd.OpenQuery "削除クエリ" DoCmd.SetWarnings True Cmd21.Enabled = False ★Kill (strInFPath)★ 'メッセージマスタ取得 Sqlstate2 = "SELECT * FROM 氏名登録なし;" Set M_MSG2 = MyDB2.OpenRecordset(Sqlstate2, dbOpenSnapshot) If M_MSG2.RecordCount > 0 Then DoCmd.SetWarnings False DoCmd.OpenQuery "くえり1" DoCmd.SetWarnings True End If Exit Sub Err_Set_Seisan_Click: End Sub 今、vbでこのようなデータ取込を作っており★のところで取込データを削除させてます。 ただこれだと1つのデータしか削除できず、複数あったときには対応が困ってます。 こちら歯どのような対応でできるでしょうか? ご指導お願いします。

  • SubではなくFunctionで作られる理由

    access2007を使っています。 素朴な疑問なのですがマクロを変換した時はなぜ Subプロシージャーではなく、Functionなのでしょうか? 「クエリを開く」と言うマクロを、VBAに変換したところ ******************************************************* Function マクロ1() On Error GoTo マクロ1_Err DoCmd.OpenQuery "クエリ1", acViewNormal, acEdit マクロ1_Exit: Exit Function マクロ1_Err: MsgBox Error$ Resume マクロ1_Exit End Function ******************************************************* となりました。 戻り値や返り値はないものは、FunctionプロシージャーではなくSubプロシージャーで作るものと思っていたのですが なぜ上記のコードはFunctionなのでしょうか? Functionで作る理由を教えてください。 特に意味はないのでしょうか? ちなみにFunctionをSubに書き換えて実行したら問題なくクエリが開きました。

  • Access csvファイルの取り込み

    Access2021 2箇所の保存先の違う所からcsvファイルの取り込みについて伺います。 csv取り込みボタンは、2つ用意しています。 1つ目のボタンに、コード記述して動作確認は正常に動作して他のボタンも正常に動作。 2つ目にのボタンに、csvの格納パス名のみ変更後コード記述して動作確認したら全てのボタンが反応しなくなりました。 動作としては、削除クエリでテーブルのデータを削除してから、指定したフォルダからcsvファイルを選択して取り込ます。 同じテーブルを使用して、格納先の違うcsvファイルを使用する操作になります。 コードは、以下の通りです。 ①ボタン1 Private Sub コマンド61_Click() '削除クエリ実行 DoCmd.SetWarnings False DoCmd.OpenQuery "テーブルデータ削除" DoCmd.SetWarnings True Dim msg As String msg = getFilePicker If msg = "" Then Exit Sub On Error GoTo err_sample DoCmd.TransferText acImportDelim, , "インポート先テーブル名", msg, True MsgBox "インポートが終了しました。", vbInformation + vbOKOnly, "処理完了" Exit Sub err_sample: Select Case Err.Number Case 3011 MsgBox "ファイルが見つかりません。処理を終了します。" Case Else MsgBox Err.Number & ":" & Err.Description End Select End Sub Function getFilePicker(Optional dTitle As String = "ファイル選択") '2003以降 Const msoFileDialogFilePicker As Integer = 3 Dim fDlg As Object Set fDlg = Application.FileDialog(msoFileDialogFilePicker) fDlg.Title = dTitle fDlg.InitialFileName = "csvインポートデータのフォルダパス名①" fDlg.AllowMultiSelect = False fDlg.Filters.Clear fDlg.Filters.Add "すべてのファイル", "*.*" fDlg.Filters.Add "CSV ファイル (*.csv)", "*.csv" fDlg.FilterIndex = 1 If fDlg.Show Then getFilePicker = fDlg.SelectedItems(1) Else getFilePicker = "" Me.Refresh End Function ②ボタン2 Private Sub コマンド62_Click() '削除クエリ実行 DoCmd.SetWarnings False DoCmd.OpenQuery "テーブルデータ削除" DoCmd.SetWarnings True Dim msg As String msg = getFilePicker If msg = "" Then Exit Sub On Error GoTo err_sample DoCmd.TransferText acImportDelim, , "インポート先テーブル名", msg, True MsgBox "インポートが終了しました。", vbInformation + vbOKOnly, "処理完了" Exit Sub err_sample: Select Case Err.Number Case 3011 MsgBox "ファイルが見つかりません。処理を終了します。" Case Else MsgBox Err.Number & ":" & Err.Description End Select End Sub Function getFilePicker(Optional dTitle As String = "ファイル選択") '2003以降 Const msoFileDialogFilePicker As Integer = 3 Dim fDlg As Object Set fDlg = Application.FileDialog(msoFileDialogFilePicker) fDlg.Title = dTitle fDlg.InitialFileName = "csvインポートデータのフォルダパス名②" fDlg.AllowMultiSelect = False fDlg.Filters.Clear fDlg.Filters.Add "すべてのファイル", "*.*" fDlg.Filters.Add "CSV ファイル (*.csv)", "*.csv" fDlg.FilterIndex = 1 If fDlg.Show Then getFilePicker = fDlg.SelectedItems(1) Else getFilePicker = "" Me.Refresh End Function ご教授の程、宜しくお願い致します。

  • Access レコード削除時に「カレントレコードがありません」エラーが表示されてしまう

    いつもお世話になっております。 フォームに「レコードの削除」ボタンを作成して実行したところ、 「カレントレコードがありません」と表示されてしまいます。 削除そのものは、正しく行われている(削除したいレコードが削除されている)のですが、 なぜ、そのようなメッセージが出てしまうのか分かりません。 他のフォームでは、削除するレコードが最後のレコードで無い限り、 そのようなメッセージは出ません。 また、そのフォームのレコードソースになっているクエリでは、 問題なく削除が実行されます。 削除ボタンの作成は、コントロールウィザードを使って行いました。 ちなみにVBAでは下記のような記述になっています。 Private Sub 削除テスト_Click() On Error GoTo Err_削除テスト_Click DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70 DoCmd.DoMenuItem acFormBar, acEditMenu, 6, , acMenuVer70 Exit_削除テスト_Click: Exit Sub Err_削除テスト_Click: MsgBox Err.Description Resume Exit_削除テスト_Click End Sub メッセージを表示させないためには、どのようにしたら良いでしょうか?? また、最後のレコードを削除した場合にも、 「カレントレコードがありません」メッセージを表示させなくするには どのようにしたら良いでしょうか? 教えてください。

専門家に質問してみよう