|
|
|
| Есть функции сохранения и чтения запроса в файл(из файла) (основа - Гетц,Литвин,Гилберт)
Вот они
'''' Запись таблицы tblname
Public Sub SaveRecordset(ByVal tblname As String, ByVal filename As String)
Dim rst As ADODB.Recordset
Dim strfile As String
Set rst = New ADODB.Recordset
rst.Open tblname, CurrentProject.Connection, adOpenStatic, adLockOptimistic
strfile = filename & ".adtg"
On Error Resume Next
Kill strfile
Err.Clear
rst.Save strfile, adPersistADTG
rst.Close
Set rst = Nothing
End Sub
'''' Чтениеь в таблицу tblname
Public Sub ReadRecordset(ByVal tblname As String, ByVal filename As String)
Dim rstpriem As ADODB.Recordset
Dim rst As ADODB.Recordset
Dim strfile As String
Dim j As Long
strfile = filename '& ".adtg" 'CurrentProject.Path & "\t.adtg"
'открываем табл приемник
Set rstpriem = New ADODB.Recordset
rstpriem.Open tblname, CurrentProject.Connection, adOpenStatic, adLockOptimistic
'читаем из файла в rst
Set rst = New ADODB.Recordset
If Len(Dir(strfile)) > 0 Then
rst.Open strfile, , adOpenStatic, adLockOptimistic
rst.ActiveConnection = CurrentProject.Connection
rst.Update
End If
'далее очистка приемника (лучше конечно запросом, но для примера пойдет)
With rstpriem
If .RecordCount > 0 Then
Do
.Delete
.MoveNext
Loop Until .EOF
End If
End With
'и вот запись в приемник
With rst
.MoveFirst
While Not .EOF
rstpriem.AddNew
'А ВОТ ФРАГМЕНТ ДЛЯ ОБСУЖДЕНИЯ
For j = 1 To rst.Fields.Count - 1
rstpriem.Fields(rst.Fields(j).Name) = .Fields(j)
Next j
'КОНЕЦ ФРАГМЕНТА
rstpriem.Update
.MoveNext
Wend
End With
rst.Close
Set rst = Nothing
rstpriem.Close
Set rstpriem = Nothing
End Sub
|
А теперь вопрос. Пришлось данные в таблицу - приемник писать по именам полей.
Хотя, казалось бы, можно было и так (тем более, что таблицы имеют одинаковую структуру)
With rst
.MoveFirst
While Not .EOF
rstpriem.AddNew
For j = 1 To rst.Fields.Count - 1
rstpriem.Fields(j) = .Fields(j)
Next j
rstpriem.Update
.MoveNext
Wend
End With
|
или даже колонками или массивами строк, НО.
ПРИ ЗАПИСИ МЕТОДОМ SaveRecordset ПОЛЯ ИДУТ В АЛФАВИТНОМ ПОРЯДКЕ!
т.е.
если имеются поля
штрихкод
наименование
артикул
цена
записаны будут в последовательности
артикул
наименование
цена
штрихкод
Собственно вопрос. Может быть я не доглядел чего и есть способ указать последовательность записи полей в методе сохранения?
(Файлы нужны для переноса с компа базы товаров в магазины. Можно, конечно использовать промежуточный mdb-файл, но вопрос не в этом. Файлы adtg меньше и не просто прочесть "шпионам")
| |
|
| |
|
|
|
|
| tblname - это что таблица?
Попробуйте использовать SQL строку с явным указанием полей, т.е.
rst.Open "Select filed1,field4,field2 from tbl" ..... | |
|
| |
|