老親介護に悩む30~60代の方へ
老親介護ねっと[老人ホーム編]
トップ 老人ホームの選び方 介護関連ニュース 新規オープンホーム情報 老人ホーム取材レポート お問い合わせ リンク集 Q&A

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

SQLのINSERT文での利用者一括登録

会社のほうで、500人くらいのスタッフを管理するシステムを入れています。
自分はシステムの直接の担当ではないのです。専門家でもないです。MSのACCESSで初歩的な売上管理のDBは作成したことはあるレベルです。
スタッフの入力を現在、画面上のフォーマットでひとつひとつやっているのですが、
CSVで入れるようなシステムはついていません。
この挿入を、SQLのinsert文で、一気にやることは、それほど詳しくない素人レベルでは可能でしょうか。

投稿日時 - 2018-07-17 17:12:15

QNo.9519169

困ってます

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

普通にやるなら、CSVをExcelで読み込んで
ACCESSなどのDBにインポートすればよいのでは?
https://www.kenschool.jp/blog/?p=3096

汎用なポータブルinsert文にしたいならばsqliteを使って
csvをインポートして、DBをdump出力すれば、3分あれば変換可能でしょう。
https://qiita.com/Kunikata/items/61b5ee2c6a715f610493
https://www.dbonline.jp/sqlite/manage/index4.html
ただしimportに先立ってTABLE定義を行わないと
CSV内の数字も文字列として認識されてimportされてdumpされます。

投稿日時 - 2018-07-17 18:41:47

お礼

ありがとうございます。
ある程度の勉強は必要のようですね。

投稿日時 - 2018-07-17 21:39:10

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

【訂正】添付図のミスを訂正しました。

Replace()とCutStr()を利用して、val_1、val_2、val_3 を AAA、BBB、CCCに書き換えています。

投稿日時 - 2018-07-17 21:16:22

ANo.2

Q、データインポートを一気にやることは、素人レベルでは可能でしょうか?
A、仕組みを作る手間暇より入力した方が速いし確実。

理由1、スタッフデータをテキストファイルにする必要がある。
理由2、データインポートプログラムをVBAで書く必要がある。

という前提で、私流の【データインポートプリグラムの仕様】を示します。

・データテキストを配列に読み込む。
・For-Next でデータをINSERTする。

これが仕様の全て。書くべきプログラムコードで利用する関数は、次のようです。


【FileReadArray関数】

Public Function FileRaedArray(ByVal FileName As String) As String()
On Error GoTo Err_FileReadArray
  Dim fso    As FileSystemObject
  Dim fil    AS File
  Dim txs    As TextStream
  Dim strText  AS String
  Dim strTexts() AS String
  
  Set fso = New FileSystemObject
  Set fil = fso.GetFile(FileName)
  Set txs = fil.OpenAsTextStream(ForReading, TristateUseDefault)
  strText = txs.ReadAll
  strTexts = Split(strText, Chr$(13) & Chr$(10))
Exit_FileReadArray:
  FileReadArray = strTexts()
  Exit Function
Err_FileReadArray:
  MsgBox Err.Description & "(FileReadArray)", vbExclamation, " 関数エラーメッセージ"
  strTexts() = Split("")
  Resume Exit_FileReadArray
End Function

【FileReadArray関数のテスト】

Private Sub コマンド0_Click()
  Dim strTexts() As String
  
  strTexts() = FileReadArray("Test.txt")
  If UBound(strTexts()) > -1 Then
    Debug.Print strTexts(0)
    Debug.Print strTexts(1)
  End If
End Sub
________________________________________________________
[イミディエイト]                          
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1: AA
2: BB

FileReadArray()は、このように各行を一つのデータとして読み込みます。これに成功したら For-Next で次のSQL文を実行するだけです。

INSERT INTO tablename (field_1,field_2・・・Field_N)
VALUES (val_1,val_2・・・,val_N);

【val_1,val_1,val_2・・・,val_N の置換要領】

置換要領は、添付図を参照されてください。Replace()とCutStr()で前述のINSERT文の雛形のValuesの値を登録データと置換します。

Public Function CutStr(ByVal Text As String, _
            ByVal Separator As String, _
            ByVal N As Integer) As String
  Dim strDatas() As String
  
  strDatas = Split("" & Separator & Text, Separator, , 0)
  CutStr = strDatas(N * Abs(N <= UBound(strDatas)))
End Function

後は、SQL文を実行するだけです。

投稿日時 - 2018-07-17 20:55:05

お礼

ありがとうございます。
ある程度の勉強は必要のようですね。

投稿日時 - 2018-07-17 21:39:26