[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2007/01/19(Fri) 11:00
投稿者名:トッチー
Eメール:
URL :
タイトル:
open 〜 Inputの構文 コンマつき
VB6で
open 〜 Inputの構文で質問します。
下記ソース

Private Sub fsfileopen()
    Dim intErrNum   As Integer
    Dim fn          As Integer
    Dim strpath     As String   '選択したファイルのフルパス
    Dim strcon      As String   '1行の内容
    Dim strall      As String   '全体
    Dim bl          As Boolean
    Dim mess        As String
    'エラーを無視する
    On Error Resume Next

    'ファイルを開くダイアログボックスを表示する
    With cmnDialog
        .Filter = "sqlファイル(*.sql)|*.sql|テキストファイル(*.txt)|*.txt"
        .ShowOpen
        strpath = .filename
    End With
    'エラー状況を取得する
    intErrNum = err.Number

    'エラー処理を元に戻す
    On Error GoTo 0

    'キャンセルで無ければ読み込む
    If intErrNum <> cdlCancel Then
        strall = vbNullString
        With txtSQL
            fn = FreeFile
            '入力値が空白もしくはパスが存在しない場合は処理を行わない
            If Dir(strpath, vbNormal) <> "" And strpath <> "" Then
                .text = vbNullString
                Open strpath For Input As fn
                    Do While Not EOF(1)
                        bl = True
                        Input #fn, strcon
                        '当ツールで作成されたファイルを読み込む場合余分な部分を取る
                        If StrConv(Left(strcon, 6), vbUpperCase) = "SPOOL " Then
                            bl = False
                        ElseIf InStr(1, StrConv(strcon, vbUpperCase), "EXIT", 1) <> 0 Then
                            bl = False
                        ElseIf StrConv(Left(strcon, 6), vbUpperCase) = "PROMPT" Then
                            bl = False
                        ElseIf StrConv(Left(strcon, 8), vbUpperCase) = "SET LINE" Then
                            bl = False
                        ElseIf StrConv(Left(strcon, 12), vbUpperCase) = "SET PAGESIZE" Then
                            bl = False
                        End If
    
                        If bl = True Then
                            strall = strall & strcon & vbCrLf
                        End If
                        DoEvents
                    Loop
                Close #fn
                .text = strall
            Else
                mess = msgbox("入力値が不正です")
            End If
        End With
    End If
End Sub

で、sqlファイルを読み込むと「100);」しか表示されません

sqlファイルの中身は
Insert into test_table values (1, '浜口' , 100);

ちなみに
desc test_table
名前                                                  NULL?    型
----------------------------------------------------- -------- ------------------------------------
ID                                                    NOT NULL NUMBER(38)
S_NAME                                                NOT NULL VARCHAR2(15)
PRICE                                                 NOT NULL NUMBER(10)

但し、読み込むSQLファイルは状況によって違うので
「select * from test_table;」
のようにコンマが無い場合(この場合は全て読み込める)や
「Insert into super_table values (1, '浜口' , 100 , 200 , '2007-01-01');」
のようにテーブルの列数は常に変わります(この場合は「'2007-01-01');」)。

書籍を読んだ所、コンマで読み込みの区切りとなるというところまで突き止めました。
変数を配列とかで数多く宣言してもコンマはいくつあるか変わってくるので
その方法は基本的には考えていません。
コンマを含め一行で読み込む方法はございますか?
ご教授お願いします。

投稿時間:2007/01/19(Fri) 12:07
投稿者名:Geo=TK3
Eメール:
URL :
タイトル:
Re: open 〜 Inputの構文 コンマつき
Input の代わりに Line Input 使えば大丈夫だと思います。

投稿時間:2007/01/19(Fri) 21:54
投稿者名:トッチー
Eメール:
URL :
タイトル:
うっかり
ありがとうございます。

本にも載っていました。

何か違和感があったので投稿しました。

勉強になりました。

投稿時間:2007/01/19(Fri) 22:03
投稿者名:LESIA
Eメール:
URL :
タイトル:
Re: open 〜 Inputの構文 コンマつき
> Do While Not EOF(1)
ではなく
Do While Not EOF(fn)
なのでは?

> で、sqlファイルを読み込むと「100);」しか表示されません
表示はどこにしているのでしょうか?

> strall = strall & strcon & vbCrLf
改行が入っていますが、その為に最後の行しか表示されてないということはないですか?