Page 1 of 1

สอบถามการแปลงข้อมูลจากจาก column และ row เป็น SQL insert command

Posted: Wed Jul 22, 2020 12:15 am
by tnos11
สอบถามแปลงข้อมูลจากจาก column และ row เป็น SQL insert command

ไม่แน่ใจว่าสามารถทำได้รึไม่ครับ และสามารถกด export มาเป็นไฟล์ .sql ได้จาก excel ไม่แน่ใจว่าสามารถทำได้รึเปล่าครับ

Re: สอบถามการแปลงข้อมูลจากจาก column และ row เป็น SQL insert command

Posted: Wed Jul 22, 2020 1:30 am
by tnos11
จากคำถามแรกตอนนี้ได้วิธีแล้วครับ ตัวอย่างจาก https://stackoverflow.com/questions/157 ... 0#37409790

และต่อเนื่องจากคำถามแรกถ้า จะทำปุ่ม Convert เฉพาะ Column SQL ขึ้นมาเพื่อทำการแปลง Data จาก Column นี้ Save ไปเป็น .sql สามารถทำได้ไหมครับ

Image

Re: สอบถามการแปลงข้อมูลจากจาก column และ row เป็น SQL insert command

Posted: Wed Jul 22, 2020 7:02 am
by snasui
:D ไฟล์ที่มีนามสกุลเป็น .sql เข้าใจว่าสามารถสร้างขึ้นมาได้ด้วย VBA เหมือนกันการสร้าง Text File ทั่ว ๆ ไปเพียงแต่กำหนดให้มีนามสกุลเป็น .sql ครับ

ส่วนจะสร้างอย่างไรนั้นจำเป็นจะต้องเขียน Code มาเอง ติดแล้วค่อยถามกันต่อครับ

เมื่อสามารถบันทึกข้อมูลจาก VBA ได้โดยตรง ปกติจะไม่สร้างไฟล์ .sql ขึ้นมาใช้ แต่จะเขียน Code ให้ทำงานบน SQL เลยครับ

Re: สอบถามการแปลงข้อมูลจากจาก column และ row เป็น SQL insert command

Posted: Wed Jul 22, 2020 4:00 pm
by tnos11
รบกวนผู้รู้ครับ จากโค้ดด้านล่างมีคำถามคือว่า

1.เราสามารถปรับเปลี่ยน Format ของวันที่ตาม Format ที่ต้องการได้ไหมครับ จากที่ได้ export ออกมาเป็น .sql จะได้เป็น

INSERT INTO checktime ('PIN','CHECKTIME') VALUES
('PIN','CHECKTIME'),
17,5/14/2020 3:32:05 PM),
16,5/14/2020 3:32:00 PM),
5,5/14/2020 3:30:51 PM)

แต่ format ที่ต้องการจะเป็น dd/mm/yyyy h:mm ครับ

2.สามารถกำหนดชื่อไฟล์ที่จะ export ออกมาจาก "myfilepath = "C:\mysql.sql" ให้ run ตามวันที่ของ Data ใน Column "CHECKTIME" ได้ไหมครับและปรับ Format เป็น yyyymmdd.sql

Image

Code: Select all

Private Sub CommandButton3_Click()
    'creates the file
    Dim myfilepath As String
    myfilepath = "C:\mysql.sql"
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    Dim myFile As Object
    Set myFile = fso.createtextfile(myfilepath)
    
    'writes stuff to the file
    With myFile
        Dim sqlstr As String
        sqlstr = "INSERT INTO checktime ("
        Dim colcount As Integer
        colcount = 1
        With ThisWorkbook.Sheets("Summary")
            Do Until .Cells(1, colcount).Value = ""
                sqlstr = sqlstr & "'" & .Cells(1, colcount).Value & "',"
                colcount = colcount + 1
            Loop
            sqlstr = Left(sqlstr, Len(sqlstr) - 1) & ") VALUES " & Chr(13) & "("
            Dim rCount As Integer
            rCount = 1
            Do Until .Cells(rCount, 1).Value = ""
                colcount = 1
                Do Until .Cells(1, colcount).Value = ""
                    If IsNumeric(.Cells(rCount, colcount).Value) Then
                        sqlstr = sqlstr & "" & .Cells(rCount, colcount).Value & _
                                    ","
                    ElseIf IsDate(.Cells(rCount, colcount).Value) Then
                        sqlstr = sqlstr & "" & .Cells(rCount, colcount).Value & _
                                    ","
                    Else
                        sqlstr = sqlstr & "'" & .Cells(rCount, colcount).Value & _
                                    "',"
                    End If
                    colcount = colcount + 1
                Loop
                sqlstr = Left(sqlstr, Len(sqlstr) - 1) & ")," & Chr(13)
                rCount = rCount + 1
            Loop
            sqlstr = Left(sqlstr, Len(sqlstr) - 2)
            
        End With
        .writeline sqlstr
    End With
    'closes the file
    myFile.Close
    Set myFile = Nothing
End Sub
ขอบคุณล่วงหน้าครับ :D :D

Re: สอบถามการแปลงข้อมูลจากจาก column และ row เป็น SQL insert command

Posted: Wed Jul 22, 2020 8:33 pm
by snasui
:D กรุณาแนบไฟล์ตัวอย่างมาด้วยและควรเป็นเช่นนี้เสมอ จะได้สะดวกในการตอบของเพื่อนสมาชิกครับ

ยังไม่ค่อยกระจ่างในเรื่องของการให้รันตามวันที่ กรุณาอธิบายเพิ่มเติม ถ้าต้องการกำหนดวันเวลารันจะต้องทำงาน Task Shedule ของ Windows แม้จะกำหนดให้รันตามค่าใน Data ก็ต้องมีตัวกำหนดให้โปรแกรมทำงานเพื่อจะเช็คว่าข้อมูลไหนพร้อมที่จะรัน เช่นนี้เป็นต้นครับ

Re: สอบถามการแปลงข้อมูลจากจาก column และ row เป็น SQL insert command

Posted: Thu Jul 23, 2020 2:57 pm
by tnos11
snasui wrote: Wed Jul 22, 2020 8:33 pm :D กรุณาแนบไฟล์ตัวอย่างมาด้วยและควรเป็นเช่นนี้เสมอ จะได้สะดวกในการตอบของเพื่อนสมาชิกครับ

ยังไม่ค่อยกระจ่างในเรื่องของการให้รันตามวันที่ กรุณาอธิบายเพิ่มเติม ถ้าต้องการกำหนดวันเวลารันจะต้องทำงาน Task Shedule ของ Windows แม้จะกำหนดให้รันตามค่าใน Data ก็ต้องมีตัวกำหนดให้โปรแกรมทำงานเพื่อจะเช็คว่าข้อมูลไหนพร้อมที่จะรัน เช่นนี้เป็นต้นครับ
ขอโทษด้วยครับ แนบไฟล์ให้แล้วนะครับ

2.สามารถกำหนดชื่อไฟล์ที่จะ export ออกมาจาก "myfilepath = "C:\mysql.sql" ให้ run ตามวันที่ของ Data ใน Column "CHECKTIME" ได้ไหมครับและปรับ Format เป็น yyyymmdd.sql

จากคำถามด้านบนผมอาจจะอธิบายไม่เคลียร์ คือผมต้องการให้ ไฟล์ที่ export ออกมาเป็น sql นั้นจากโค้ดด้านบน กำหนดชื่อ ไฟล์ไว้อยู่แล้วเป็น mysql.sql แต่ผมสงสัยว่าเราสามารถกำหนดให้ชื่อไฟล์ นั้น set ตาม data ที่ใน column B ที่เป็นวันที่ได้ไหมครับ ผมไม่แน่ใจต้องเขียน code ยังไงให้ ไปดึงค่า วันที่จาก column B มาและมาใส่ เป็นชื่อไฟล์ ตาม format "yyyymmdd.sql" นี้ได้ครับ

ซึ้งโค้ดจะฝั่งอยู่ในปุ่ม Create SQL File และ Column B ตามที่วงไว้ให้ ซึ่งต้องการดึงค่าวันที่สัก 1 row เพื่อไปกำหนดเป็น ชื่อไฟล์ครับ

ขอบคุณครับ

Re: สอบถามการแปลงข้อมูลจากจาก column และ row เป็น SQL insert command

Posted: Sat Jul 25, 2020 8:14 am
by snasui
tnos11 wrote: Wed Jul 22, 2020 4:00 pm 1.เราสามารถปรับเปลี่ยน Format ของวันที่ตาม Format ที่ต้องการได้ไหมครับ จากที่ได้ export ออกมาเป็น .sql จะได้เป็น

INSERT INTO checktime ('PIN','CHECKTIME') VALUES
('PIN','CHECKTIME'),
17,5/14/2020 3:32:05 PM),
16,5/14/2020 3:32:00 PM),
5,5/14/2020 3:30:51 PM)
:D กำหนด Format ให้กับวันที่ได้ด้วยฟังก์ชั่น Application.Text ตามด้านล่างครับ

Code: Select all

'Other code
Do Until .Cells(1, colcount).Value = ""
    If IsNumeric(.Cells(rCount, colcount).Value) Then
        sqlstr = sqlstr & "" & .Cells(rCount, colcount).Value & _
                    ","
    ElseIf IsDate(.Cells(rCount, colcount).Value) Then
        sqlstr = sqlstr & "" & Application.Text( _
            .Cells(rCount, colcount).Value, "dd/mm/yyyy hh:mm") & _
            ","
    Else
        sqlstr = sqlstr & "'" & .Cells(rCount, colcount).Value & _
                    "',"
    End If
    colcount = colcount + 1
Loop
'Other code
tnos11 wrote: Thu Jul 23, 2020 2:57 pm 2.สามารถกำหนดชื่อไฟล์ที่จะ export ออกมาจาก "myfilepath = "C:\mysql.sql" ให้ run ตามวันที่ของ Data ใน Column "CHECKTIME" ได้ไหมครับและปรับ Format เป็น yyyymmdd.sql
การเปลี่ยนชื่อทำได้ 2 แบบ คือเปลี่ยนในขั้นตอนกำหนดตัวแปร และเปลี่ยนทีหลัง

กรณีเปลี่ยนในขั้นตอนการกำหนดตัวแปรให้เป็นชื่อไฟล์ สามารถใช้ Statement ตามด้านล่างครับ

Code: Select all

Private Sub CommandButton3_Click()
    'creates the file
    Dim myfilepath As String
    myfilepath = "C:\mysql" & _
        Application.Text(Worksheets("Summary").Range("b2").Value, "yyyymmdd") & ".sql"
    'Other code