ข้อมูล 2 Query ลง TextFile เดียวกัน
กระทู้เก่าบอร์ด อ.Yeadram

 2,553   11
URL.หัวข้อ / URL
ข้อมูล 2 Query ลง TextFile เดียวกัน

เราสามารถส่งออกข้อมูล 2 Query ที่มีจำนวนฟิลด์ไม่เหมือนกัน และไม่เท่ากันลง TextFile เดียวกัน หรือไม่ครับ ถ้าได้ทำอย่างไรครับ

11 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R12345
ปัจจุบัน ผมส่งออกมา 2 Text File แล้วเขียน BAT File ให้มันมารวมกัน
อยากรู้ว่าใน Access มีคำสั่งให้ออกไปรวมกันได้เลยรึปล่าว
2 @R12350
ลอง method   writeline ดูครับ
3 @R12359
method   writeline มันคืออะไร ครับ
4 @R12361
สร้าง object ที่เป็น text file ขึ้นมาก่อน แล้วใช้ object.writeline เพื่อเขียนข้อมูลลงไปทีละบรรทัด
ข้อดีคือกำหนด ข้อมูลที่จะเขียนได้อย่างอิสระ
ข้อเสียคือ ต้อง ควบคุมข้อมูล ทำการวนลูปต่างๆเอง ไม่ง่ายเหมือน export file
5 @R12366
ในการ Export ผมเคย Export ออกเป็น EXcel โดยให้เข้าไปยังไฟล์
ที่กำหนด โดยมาจาก Query หลายๆ Query วิธีการก็ทำจากแมรโคร
ไม่รู้ว่า Text File ต้องทำอย่างไรบ้าง
6 @R12370
ประมาณว่า
dim RS
Dim conn
Dim tx อันนี้ text   ถ้าใช้ filesystemobject ก็ได้(ผมชอบมัน) หรือเปิดแบบ dos โบราณก็ได้ เอาเป็นว่ามันคือการสร้าง text file เปล่าขึ้นมาอันนึงนั่นแหละครับ

' งานแรก
rs.open "query1", conn, 1
do while not rs.eof
tx.writeline rs(0) & "; " & rs(1) & .......
rs.movenext
loop

' งานต่อไป
rs.close
rs.open "Query2", conn,1
เขียนเหมือนกันนั่นแหละครับ....

แล้วสั่งจบงานให้ครบถ้วน
tx.close สั่งให้มันปิด หรือสั่งให้มันเซฟแล้วปิด นั่นคือการสร้าง text file เรียบร้อยแล้ว
rs.close สั่งปิดคิวรี่ที่ค้างในแรม
set rs=nothing ปิดอื่นๆ ตามปกตินั่นแหละครับ

มันลำบากสำหรับการเขียนลูป นิดนึงครับแต่ถ้าไล่ครับ เขียนครบจริงๆ แล้วจะเห็นได้ว่า มันละเอียด มันอิสระ มันยืดหยุ่นกว่าการใช้คำสั่ง export เยอะเลยครับ สังเกตง่ายๆ ไหมครับว่า ลูปแรก คิวรี่แรก ไม่มีอะไรเกี่ยวข้องกับ ลูปสอง คิวรี่สองเลยสักนิด ดังนั้น ไม่ง้อ ไม่สนครับ ว่ามันจะมีกี่ฟิลด์
7 @R12371
Dim RS
    Dim conn ตัวนี้คืออะไรครับ
    Dim tx
        RS.Open "Query1", conn, 1
    Do While Not RS.EOF
        tx.writeline RS(0) & "; " & RS(1) บรรทัดนี้คือสั่งให้อะไรครับ
        RS.MoveNext
    Loop
        RS.Close
        RS.Open "Query2", conn, 1
        RS.Close
        Set RS = Nothing
8 @R12372
ตัวแรก เรียกว่า ตัวแปร class object
ให้เราประกาศเป็น class connection
ในที่นี้ประกาศเต็มๆ คือ
dim Conn as new adodb.connection

เมื่อประกาศแล้วมันก็พร้อมใช้ มันสามารถ สั่งเปิดเรคคอร์ดเซ็ตได้ เช่น ถ้ากำหนด ให้ RS คือ new adodb.recordset
เราก็ให้ conn มาเปิด

rs.open .... , conn


หรือจะใช้มันสั่งรันคิวรี่ได้เช่น
conn.execute "Delete * from table1"
เป็นต้น


ต่อไปบรรทัดที่ว่า คือการสั่งโปรยข้อมูลแต่ละฟิลด์ลงใน text file ครับ
เราจะให้โปรยฟิลด์ที่เท่าไหร่บ้าง โปรยอย่างไร
เช่น จะให้โปรยฟิลด์ (จากคิวรี่1) ที่1(ID) และฟิลด์ที่ 3(fName)
ในรูปแบบต่อกันไปในบรรทัดเดียว คั่นด้วยเครื่องหมาย เซมิ ก็จะเขียนได้สองอย่าง เช่น

tx.writeline RS(0) & "; " & RS(3)
หรือ
tx.writeline RS("ID") & "; " & RS("fName")

หรือถ้าต้องการให้แต่ละฟิลด์ แยกกันอยู่คนละบรรทัด เราก็อาจต้องสั่ง writeline สองครั้งเช่น

do whil.....
tx.writeline rs(0)
tx.writeline rs(2)
rs.movenext
loop

เป็นต้น
9 @R12373
อ้อลืมไป สำหรับตัวแปร object connection เมื่อประกาศแล้วต้องระบุค่าให้มันด้วยนะครับ ว่ามันคือคอนเนคชั่นของฐานข้อมูลใด
Dim Conn as New ADODB.Connection
ถ้าต้องการให้คือฐานข้อมูลปัจจุบัน ก็ต้องให้ค่า
Set Conn = CurrentProject.connection

หรือถ้าต้องการติดต่อสั่งการฐานข้อมูลตัวอย่างก็ต้องให้ค่าเช่น
Conn.open "Provider=sqloledb;Data Source=thai-access.com;Database=accweb;User ID=yeadram;password=board224;"
10 @R12374
อ้างถึง tx.writeline RS(0) & "; " & RS(3) หรือ tx.writeline RS("ID") & "; " & RS("fName")

ถ้าเรามี 40 Column เราต้องเขียนต่อกันไป RS(0)...ไปจนถึง...RS(39)
ใช่มั้ยครับอาจารย์
11 @R12375
วน loop ต่อ string ก่อนค่อยสั่ง writeline ทีเดียวครับ

str = rs(0)
For i = 1 to 39
    str = str & ";" & rs(i)
Next i
tx.writeline str
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3146s