Microsoft Access-ээс мэдээлэл экспортлох нь маш хялбар байдаг - хэрэв та зөвхөн ганц экспортын файл үүсгэхийг хүсч байвал. Асуулгыг (эсвэл хүснэгтийг) олон экспортын файл болгон хуваах шаардлагатай үед та юу хийдэг вэ? Жишээлбэл, хэрэв та сар бүр хэрэглэгчийн гүйлгээний жагсаалтыг экспортлох шаардлагатай бол хэрэглэгч бүр өөрсдийн экспортын файлтай байх уу? Энэ нийтлэл танд туслах болно. Экспортыг 2, 10 эсвэл зуун өөр хэлбэрээр гаргах нь VBA-ийн кодын жижиг хэсгийг ажиллуулахтай адил энгийн бөгөөд гар аргаар хэдэн цагийн турш хасах / буулгах ажил биш хэдэн секундын дотор ажил дуусах болно. Тиймээс эхэлье ...
Арга барил
Бид үүнийг аль болох уян хатан, ашиглах боломжтой байлгахыг хүсч байгаа тул энэ нийтлэлийн код ердийнхөөс арай урт байх болно, гэхдээ та яагаад удахгүй үүнийг ойлгох болно.
Нэгдүгээрт, бид юунд хүрэхийг хүсч байгаагаа тоймлоё.
Асуулгын дагуу өгөгдсөн талбар дахь утга өөрчлөгдөх бүрт шинэ файл гаргаж ирнэ.
Сорилт
Үүнийг хийхийн тулд бид тухайн мөрийн холбогдох талбарыг өмнөх эгнээний утгатай харьцуулж асуулгын үр дүнг судалж үзэх хэрэгтэй. Хэрэв өөр бол шинэ файл, файл үүсгэх хэрэгтэй.tart асуулгын үр дүнг тэнд гаргах.
Энэ нь юунд тохиромжгүй вэ
Өмнө дурьдсанчлан мэдээллийн баазынхаа зарим хэсгийг экспортлохыг хүсч байгаа олон шалтгаан байгаа боловч үүнийг нөөцлөх / архивлах зорилгоор ашиглах нь эдгээрийн нэг биш юм. Энд ашиглах - Хэрэв та а-г сэргээх шаардлагатай бол хамгийн сүүлд хийхийг хүсч байгаа зүйл авлигад өртсөн мэдээллийн сан олон экспортыг хэрхэн яаж нэгтгэх талаар ажиллаж байна!
Шийдэл?
Муурыг арьсаар арчлах олон арга байдаг, энэ бол ганцхан арга, гэхдээ миний бодлоор маш сайн ажилладаг. Нэгдүгээрт, бид хөдөлгөөнийг хөнгөвчлөх зорилгоор асуулгыг массив болгон унших болно. Дараа нь бид тухайн массиваар дамжуулж холбогдох талбараас шинэ утга олсон эсэхээ шалгана. Хэрэв энэ нь шинэ утга биш бол бид бичлэгийг бүхэлд нь одоогийн бичиж байгаа файлдаа гаргана, хэрэв шинэ бол тэр файлыг хаагаад starшинэ.
Мөн код ...
Sub DoExport(fieldName As String, queryName As String, filePath As String, Optional delim As Variant = vbTab)
Dim db As Database
Dim objRecordset As ADODB.Recordset
Dim qdf As QueryDef
Dim fldcounter, colno, numcols As Integer
Dim numrows, loopcount As Long
Dim data, fs, fwriter As Variant
Dim fldnames(), headerString As String
'get details of the query we'll be exporting
Set objRecordset = New ADODB.Recordset
Set db = CurrentDb
Set qdf = db.QueryDefs(queryName)
'load the query into a recordset so we can work with it
objRecordset.Open qdf.SQL, CurrentProject.Connection, adOpenDynamic, adLockReadOnly
'load the recordset into an array
data = objRecordset.GetRows
'close the recordset as we're done with it now
objRecordset.Close
'get details of the size of array, and position of the field we're checking for in that array
colno = qdf.Fields(fieldName).OrdinalPosition
numrows = UBound(data, 2)
numcols = UBound(data, 1)
'as we'll need to write out a header for each file - get the field names for that header
'and construct a header string
ReDim fldnames(numcols)
For fldcounter = 0 To qdf.Fields.Count - 1
fldnames(fldcounter) = qdf.Fields(fldcounter).Name
Next
headerString = Join(fldnames, delim)
'prepare the file scripting interface so we can create and write to our file(s)
Set fs = CreateObject("Scripting.FileSystemObject")
'loop through our array and output to the file
For loopcount = 0 To numrows
If loopcount > 0 Then
If data(colno, loopcount) <> data(colno, loopcount - 1) Then
If Not IsEmpty(fwriter) Then fwriter.Close
Set fwriter = fs.createTextfile(filePath & data(colno, loopcount) & ".txt", True)
fwriter.writeline headerString
writetoFile data, queryName, fwriter, loopcount, numcols
Else
writetoFile data, delim, fwriter, loopcount, numcols
End If
Else
Set fwriter = fs.createTextfile(filePath & data(colno, loopcount) & ".txt", True)
fwriter.writeline headerString
writetoFile data, delim, fwriter, loopcount, numcols
End If
Next
'tidy up after ourselves
fwriter.Close
Set fwriter = Nothing
Set objRecordset = Nothing
Set db = Nothing
Set qdf = Nothing
End Sub
'parameters are passed "by reference" to prevent moving potentially large objects around in memory
Sub writetoFile(ByRef data As Variant, ByVal delim As Variant, ByRef fwriter As Variant, ByVal counter As Long, ByVal numcols As Integer)
Dim loopcount As Integer
Dim outstr As String
For loopcount = 0 To numcols
outstr = outstr & data(loopcount, counter)
If loopcount < numcols Then outstr = outstr & delim
Next
fwriter.writeline outstr
End Sub
Код юу хийж байна вэ?

Нэгдүгээрт, бид кодыг хоёр хэвшил болгон хуваасан. Эхнийх нь одоогийн бичлэгийг одоо ажиллаж байгаа файл дээр бичих эсвэл шинэ файлд бичих эсэхийг шалгана. Хоёрдахь горим нь бүх бичлэгийн дэлгэрэнгүй мэдээллийг файлд өгдөг. Кодын давхардлыг багасгахын тулд ийм аргаар хийсэн, эс тэгвээс олон газарт ижил давталт гарч байгааг та харах болно.
Хоёрдугаарт, бидний асууж буй асуулгын талаар дэлгэрэнгүй мэдээлэл авахын тулд би "Query Definition" -ийг ашиглаж байна.Хэрэв та хүснэгттэй ажиллахдаа үүнийг тохируулахыг хүсч байвал үүнийг " Хүснэгтийн тодорхойлолт. ”
Үүнийг хэлэхэд, энэ нь таны буцааж лавлаж, маш их ашигладаг кодын нэг хэсэг гэдэгт би бүрэн итгэлтэй байна!
Зохиогчийн танилцуулга:
Митчелл Цөөрөм бол мэдээлэл сэргээх мэргэжилтэн юм DataNumen, Үүнд мэдээлэл сэргээх технологиор дэлхийд тэргүүлэгч, Inc. засвар SQL Server мэдээ болон excel сэргээх програм хангамжийн бүтээгдэхүүнүүд. Дэлгэрэнгүй мэдээллийг авна уу WWW.datanumen.com