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 สามารถทำได้ไหมครับ

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

ไฟล์ที่มีนามสกุลเป็น .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
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
ขอบคุณล่วงหน้าครับ

Re: สอบถามการแปลงข้อมูลจากจาก column และ row เป็น SQL insert command
Posted: Wed Jul 22, 2020 8:33 pm
by snasui

กรุณาแนบไฟล์ตัวอย่างมาด้วยและควรเป็นเช่นนี้เสมอ จะได้สะดวกในการตอบของเพื่อนสมาชิกครับ
ยังไม่ค่อยกระจ่างในเรื่องของการให้รันตามวันที่ กรุณาอธิบายเพิ่มเติม ถ้าต้องการกำหนดวันเวลารันจะต้องทำงาน 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

กรุณาแนบไฟล์ตัวอย่างมาด้วยและควรเป็นเช่นนี้เสมอ จะได้สะดวกในการตอบของเพื่อนสมาชิกครับ
ยังไม่ค่อยกระจ่างในเรื่องของการให้รันตามวันที่ กรุณาอธิบายเพิ่มเติม ถ้าต้องการกำหนดวันเวลารันจะต้องทำงาน 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)

กำหนด 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