none
VB6.0的程式要怎樣撰寫(還是不可能寫出這樣的程式碼) RRS feed

  • 問題

  •  

    我利用CommonDialog寫了一個匯入的程式碼了,可是他卻是只能在資料庫沒有TABL資料表的時候才能執行
    如果有TABL這個資料表就會出錯
    可是我必須把他改成將EXCEL的工作表匯入到ACCESS資料庫裡的TABL資料表的特定欄位
    例如:
    EXCEL工作表的內容:號碼          姓名            性別
                                      21              A                男
                                      F1              B                女
                                                                 ↓匯入到ACCSESS
    TABL資料表中的:ID             NO               NAME               SEX             CGECKED
                                                21                   A                     男
                                                F1                   B                     女


    (並判斷NO這裡的號碼有沒有重複到)
    請問我要如何用VB6.0寫這樣的程式碼呢??
    因為現在我的程式碼必須在TABL刪除的時候才能做匯入的動作
    拜託大家幫幫我,或是告訴我哪本書有(目前我家所有的VB書含有學校的圖書館裡的VB書都找過了完全沒有這類的程式碼,才會發問的)
    (如需附上我原先的程式碼請告知謝謝)

    2007年12月30日 上午 03:43

解答

  • 你的程式碼問題在:

    程式碼區塊
    SQL = "select * into " & sAccessTable & " from [excel 8.0;database=" & sExcelPath & "].[" & sSheetName & "$]"

     

     

    沒人知道你用哪本書當課本,這種東西沒有標準教材,不要使用這種不精確的詞。

    沒有教科書就搜尋線上手冊,線上手冊也有:

    SELECT...INTO 陳述式

    建立產生資料表查詢

    語法

    SELECT field1[, field2[, ...]] INTO newtable [IN externaldatabase]
        FROM source

    備註

    • 您可能要為一個新增資料表定義一個主索引。 當您建立一個新增資料表時,在新增資料表之中的欄位將繼承查詢的底層資料表中的每一個欄位的資料類型及大小,但是不會移轉其它的欄位或資料表屬性。
    • 若要增加資料到現存資料表,請使用 INSERT INTO 陳述式以代替建立新增查詢
    • 若要尋找出哪些記錄在您執行產生資料表查詢之前會被選取,首先檢驗一個 SELECT 陳述式的結果,且該陳述式使用相同的選取範圍準則。

     

    建立當然是要原先不存在的。所以依據備註的說明去查詢:

    INSERT INTO 陳述式

    新增一個或多個記錄至一個資料表。 此動作可參照為一個新增查詢

    語法

    多重記錄新增查詢:

    INSERT INTO target [(field1[, field2[, ...]])] [IN externaldatabase]
        SELECT [source.]field1[, field2[, ...]
        FROM tableexpression

    單一記錄新增查詢:

    INSERT INTO target [(field1[, field2[, ...]])]
        VALUES (value1[, value2[, ...])

    註解

    您可以使用 INSERT INTO 陳述式來新增一個單一記錄至一個資料表中,如以上所示使用單一記錄新增查詢語法。 在這種例子中,您的程式碼指定了每一欄位的記錄名稱和值。 您必須指定想要分配每一記錄欄位的值以及在此欄位的值。 如果您沒有指定每一個欄位時,預設值或 Null 值將被插入至沒有資料的欄之中。 這些記錄將被新增至資料表的尾部。

    您亦可以使用 INSERT INTO 從其他的資料表新增一組記錄,或使用 SELECT 來查詢 ... FROM 子句如以上所示之多重記錄新增查詢語法,您亦可以從另一資料表或查詢使用 INSERT INTO 新增一組記錄。 在這個範例中,SELECT 子句將指定新增欄位至指定的 target 資料表。

    ...

     

    若有資料重覆問題,請在查詢

    UPDATE 陳述式

    建立一個更新查詢以變更基於特定準則的特定資料表中的欄位值。

    語法

    UPDATE table
        SET newvalue
        WHERE criteria;

     

    DELETE 陳述式

    建立一個刪除查詢,可從列在 FROM 子句之中的一或多個資料表中移除記錄,且該子句符合 WHERE 子句中的條件。

    語法

    DELETE [table.*]
        FROM table
        WHERE criteria

    2007年12月30日 上午 06:38
    版主

所有回覆

  • 可以。請先貼程式碼才知到哪裡有問題。

     

    這是資料庫命令語法問題,有既存資料用 Update 命令,沒有既存資料用 Insert 命令。

     

    這類知識會在 VB6 存取資料庫相關書籍中介紹。

    2007年12月30日 上午 06:16
    版主
  •  

    Dim SQL As String
    Dim conn As ADODB.Connection
    Private Sub ExportExcelSheetToAccess(sSheetName As String, sExcelPath As String, sAccessTable As String, sAccessDBPath As String)
    Set conn = New ADODB.Connection
    Dim Constr As String

        Constr = "PROVIDER = Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & sAccessDBPath
        conn.Open Constr
        SQL = "select * into " & sAccessTable & " from [excel 8.0;database=" & sExcelPath & "].[" & sSheetName & "$]"
        conn.Execute SQL
        conn.Close
        Set conn = Nothing

    End Sub

    Private Sub Command1_Click()
    ExportExcelSheetToAccess List1.Text, CommonDialog1.FileName, "TABL", "" & App.Path & "\123.mdb"

    End Sub

    Private Sub Command2_Click()
    On Error GoTo man
        CommonDialog1.Filter = "Excel文件檔(*.xls)|*.xls"
        CommonDialog1.ShowOpen
        Label1.Caption = CommonDialog1.FileName
        Excel_sheet
    man:
        Exit Sub
    End Sub

    Private Sub Excel_sheet()
    Dim MyDb As ADODB.Connection, MyTb As ADODB.Recordset
    Set MyDb = New ADODB.Connection
    Set MyTb = New ADODB.Recordset
        MyDb.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Label1.Caption & ";Extended Properties=Excel 8.0;"
    Set MyTb = MyDb.OpenSchema(adSchemaTables)
    Do While Not MyTb.EOF
        k = Len(MyTb!TABLE_NAME)
        List1.AddItem Mid(MyTb!TABLE_NAME, 1, k - 1)
        MyTb.MoveNext
    Loop
    End Sub

    恩??有咪??課本都沒有寫匯入ㄟ....我是在VB入學網站找到的><(我找的課本太少東西了ㄇ??)
    2007年12月30日 上午 06:21
  • 你的程式碼問題在:

    程式碼區塊
    SQL = "select * into " & sAccessTable & " from [excel 8.0;database=" & sExcelPath & "].[" & sSheetName & "$]"

     

     

    沒人知道你用哪本書當課本,這種東西沒有標準教材,不要使用這種不精確的詞。

    沒有教科書就搜尋線上手冊,線上手冊也有:

    SELECT...INTO 陳述式

    建立產生資料表查詢

    語法

    SELECT field1[, field2[, ...]] INTO newtable [IN externaldatabase]
        FROM source

    備註

    • 您可能要為一個新增資料表定義一個主索引。 當您建立一個新增資料表時,在新增資料表之中的欄位將繼承查詢的底層資料表中的每一個欄位的資料類型及大小,但是不會移轉其它的欄位或資料表屬性。
    • 若要增加資料到現存資料表,請使用 INSERT INTO 陳述式以代替建立新增查詢
    • 若要尋找出哪些記錄在您執行產生資料表查詢之前會被選取,首先檢驗一個 SELECT 陳述式的結果,且該陳述式使用相同的選取範圍準則。

     

    建立當然是要原先不存在的。所以依據備註的說明去查詢:

    INSERT INTO 陳述式

    新增一個或多個記錄至一個資料表。 此動作可參照為一個新增查詢

    語法

    多重記錄新增查詢:

    INSERT INTO target [(field1[, field2[, ...]])] [IN externaldatabase]
        SELECT [source.]field1[, field2[, ...]
        FROM tableexpression

    單一記錄新增查詢:

    INSERT INTO target [(field1[, field2[, ...]])]
        VALUES (value1[, value2[, ...])

    註解

    您可以使用 INSERT INTO 陳述式來新增一個單一記錄至一個資料表中,如以上所示使用單一記錄新增查詢語法。 在這種例子中,您的程式碼指定了每一欄位的記錄名稱和值。 您必須指定想要分配每一記錄欄位的值以及在此欄位的值。 如果您沒有指定每一個欄位時,預設值或 Null 值將被插入至沒有資料的欄之中。 這些記錄將被新增至資料表的尾部。

    您亦可以使用 INSERT INTO 從其他的資料表新增一組記錄,或使用 SELECT 來查詢 ... FROM 子句如以上所示之多重記錄新增查詢語法,您亦可以從另一資料表或查詢使用 INSERT INTO 新增一組記錄。 在這個範例中,SELECT 子句將指定新增欄位至指定的 target 資料表。

    ...

     

    若有資料重覆問題,請在查詢

    UPDATE 陳述式

    建立一個更新查詢以變更基於特定準則的特定資料表中的欄位值。

    語法

    UPDATE table
        SET newvalue
        WHERE criteria;

     

    DELETE 陳述式

    建立一個刪除查詢,可從列在 FROM 子句之中的一或多個資料表中移除記錄,且該子句符合 WHERE 子句中的條件。

    語法

    DELETE [table.*]
        FROM table
        WHERE criteria

    2007年12月30日 上午 06:38
    版主
  •  

    很謝謝你

    程式碼是在網路上面找的,課本裡面根本就沒有寫,教科書有很多本,但是每本幾乎都只提議點點或是根本沒有提到

    你說的線上手冊(我家沒安裝)

    不過還是很謝謝你的幫忙,我研究一下吧,希望我可以用的出來
    2007年12月30日 下午 02:48