INSERT INTOについて教えて下さい。

解決


さる  2006-04-18 22:20:18  No: 95115

基本的な事とは思いますが教えて下さい。

テキストファイルを読み込んでテーブルに追加したく
下記のようなコードを作成しました。
    Dim cnn As New ADODB.Connection
    Dim cmd As New ADODB.Command

    Dim AA As String
    Dim BB(2) As Variant
    
    cnn.Open "Provider=SQLOLEDB;Data Source=T_SERVER;Initial Catalog=T_DATABASE;", "sa", "password"
    cmd_TABLE.ActiveConnection = mycnn
    Open "A:\TEST.txt" For Input As #1
    Do Until EOF(1)
        Line Input #1, AA
        BB(1) = Cstr(Mid$(AA , 1 , 2)
        BB(2) = Cint(Mid$(AA , 3 , 5)
        mycmd.CommandText = "insert into テーブル名(項目1,項目2) values('" & BB(1) & "'," & BB(2) & ")"
        mycmd.Execute myStrSQL, , adCmdText
    Loop
    Close #1
    mycnn.Close
※項目1は文字型、項目2は数値型です。
実際は追加する項目が多い為、Variant型を使用して上記のようにしていますが、
一般的にVariant型は使わない方がいいのでしょうか?
また、コードの記述方法についておかしな点がありましたらご教授頂ければ
幸いです。環境はVB6.0  SQLSERVER2000  です。


特攻隊長まるるう  2006-04-19 01:07:51  No: 95116

読込んでるのはテキストデータで、SQL文はタダの文字列なので、
Variant 型を使う意味が分からない。文字列しか扱ってないなら、全部
String 型でいいのでは?

有効な処理の可能性があるのは、異常データがテキストファイルに
含まれていた場合、型変換の時点で落ちるでしょうから、エラートラップ
してあれば入力チェックの代わりになります。…が、データのチェックが
必要なら、それこそ専用のコードを書くでしょう?。

…あとは数値型に変換した時に先頭に0があったら消えたり、型によって
小数点が切られたり…微妙な変更が実行される可能性は無数にあるけど
…それを意識したコードでは無いよね?


さる  2006-04-19 02:20:59  No: 95117

特攻隊長まるるうさんありがとうございます。
>…あとは数値型に変換した時に先頭に0があったら消えたり、型によって
>小数点が切られたり…微妙な変更が実行される可能性は無数にあるけど
>…それを意識したコードでは無いよね?
こちらについては下の
  Cstr(Mid$(AA , 1 , 2)
  Cint(Mid$(AA , 3 , 5)
この部分の記述を変えて小数等の処理もする予定でした。
(すべて記入すると長くなるので要約したつもりが逆に説明不足になってしまいました。)
固定長のテキストファイルを決められた箇所で区切り、
文字型、数値型混同のSQLサーバーテーブルに追加したかったので
String型だと数値型項目に対し型変換エラーになると思いVariant型にしました。
VBについて知識が乏しく一般的に変数を使用したINSERT INTO文(またはそれに同等するもの)
の記述方法を知りたく書き込みしました。
宜しくお願いします。


medaka  2006-04-19 02:53:47  No: 95118

Variant型使わないでできるなら使わないほうがいいでしょう
どうしても使いたいなら仕方ないのでは?
あとパラメータで渡したほうがいいと思う。


さる  2006-04-19 03:31:36  No: 95119

medakaさんありがとうございます。
>あとパラメータで渡したほうがいいと思う。
具体的にどういう事か教えて頂けますと
大変助かります。
宜しくお願い致します。


特攻隊長まるるう  2006-04-19 03:48:22  No: 95120

結局、
>        mycmd.CommandText = "insert into テーブル名(項目1,項目2) values('" & BB(1) & "'," & BB(2) & ")"

        mycmd.CommandText = "insert into テーブル名(項目1,項目2) values('" & CStr(BB(1)) & "'," & CStr(BB(2)) & ")"
と同じことには気づいているの?

>String型だと数値型項目に対し型変換エラーになると思いVariant型にしました。
数値型に変換して色々操作したい部分だけ別処理にして、結果を String 型に
すれば良いだけでしょ?

それ以前に入れ物を配列しか使えないというのが処理を限定しているの
では?数万行のデータを Values だけ変えて同じ SQL文で実行するなら
medaka さんのおっしゃるように
>あとパラメータで渡したほうがいいと思う。
です。
『CreateParameter』辺りをキーワードにVBのヘルプやWEBを検索すれば
パラメータの設定の仕方が分かると思います。最初からパラメータを作って
おけば、パラメータの入れ物にデータを突っ込めばいいだけなので、
パラメータごとに設定したデータ型で処理できます。


さる  2006-04-20 20:21:38  No: 95121

返答遅くなりました。

パラメータ渡しにした方がコードの見た目もすっきりしそうなので、
その方法を使用したいと思います。

ちなみにですが、
>>        mycmd.CommandText = "insert into テーブル名(項目1,項目2) values('" & BB(1) & "'," & BB(2) & ")"
?が
>        mycmd.CommandText = "insert into テーブル名(項目1,項目2) values('" & CStr(BB(1)) & "'," & CStr(BB(2)) & ")"
>と同じことには気づいているの?
については理解できているつもりです。
(InsertInto文で使用する変数はすべて文字型で問題ないというのは知りませんでしたが・・・。)
InsertInto文内で型変換をすると文が長くなり、
個人的に見た目が良くないと感じたので型変換は別部分で処理しています。
要は同じ結果の処理をいかに見やすく解り易く記述したかったのですが、
一般的にはどのように記述するのか知りたかったのでした。
ありがとうございました。またお願いします。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加