Форумы HiProg.com - MS ACCESS, VBA, VB

 

Ответить на сообщение

Вернуться к теме

Вы отвечаете на сообщение:

ник: Дядя Федор
Есть функции сохранения и чтения запроса в файл(из файла) (основа - Гетц,Литвин,Гилберт)
Вот они

'''' Запись таблицы 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 меньше и не просто прочесть "шпионам")


Ваше имя:

Пароль:

Цитировать: [quote][/quote] Код: [code][/code]
Жирный: [b][/b] Наклонный: [i][/i]
URL: [url][/url] 

Сообщение:

 Размер файла не более 50 Кбт. Большие файлы можно размещать на www.slil.ru

Прикрепить:

 

Для вставки смайлов в текст щелкните по значку.