Как сохранить данные из Data в новый dbf или txt файл?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Tor
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 05.11.2004 (Пт) 12:17

Как сохранить данные из Data в новый dbf или txt файл?

Сообщение Tor » 15.11.2004 (Пн) 9:45

Всем привет!
Может кто знает как сохранить данные из Data в новый dbf или txt файл :?:

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 15.11.2004 (Пн) 11:25

Recordset.AddNew
...
Recordset.Update

Open ... For Output
...
Close
Lasciate ogni speranza, voi ch'entrate.

Tor
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 05.11.2004 (Пт) 12:17

Сообщение Tor » 25.11.2004 (Чт) 15:57

alibek писал(а):Recordset.AddNew
...
Recordset.Update

Open ... For Output
...
Close


Фенкс
Круто!
А можна по подробнее :D

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 25.11.2004 (Чт) 16:14

Телепаты в отпуске, откуда же взяться подробностям?
Ты напиши подробнее, в каком виде у тебя Data и что надо получить?
Lasciate ogni speranza, voi ch'entrate.

ZlydenGL
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 148
Зарегистрирован: 13.08.2004 (Пт) 10:02

Сообщение ZlydenGL » 25.11.2004 (Чт) 16:16

1. Дата - что такое?
2. Куда тебе все-таки нужно выгрузить? В txt или dbf?
3. Если Дата это DAO.Recordset, то самая простая выгрузка в txt выглядит так:
Код: Выделить всё
Open FileName For Output as #1
While Not Дата.EOF
Print #1, Поле1, Поле 2, ..., ПолеN
Дата.MoveNext
Wend
Close #1


Ну а если ты еще и дальше VBA не ездишь, то читай хелп по DoCmd.TransferText для текстовых файлов и DoCmd.OutputTo для dbf.
Покой нам только снится!!! И то редко. Поскольку нет в мире совершенства, а есть только стремление к оному.

Tor
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 05.11.2004 (Пт) 12:17

Сообщение Tor » 25.11.2004 (Чт) 16:44

Есть dbf-ник (FoxPro 2.6), надо выбрать данные по запросу к примеру SELECT * FROM table1 WHERE field1
= "text"
И запихнуть в dbf и в txt
через Data не обязательно, просто хочу узнать как по проще будет

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 25.11.2004 (Чт) 16:45

Вообще самый простой способ - прочитать Help по методу Save у Recordset-a...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

ZlydenGL
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 148
Зарегистрирован: 13.08.2004 (Пт) 10:02

Сообщение ZlydenGL » 25.11.2004 (Чт) 16:52

Хе! Воистину, все гениальное - просто! ;)
А Recordset.Save не подключивает? Что-то я нигде не видел рекомендаций им пользоваться.
Покой нам только снится!!! И то редко. Поскольку нет в мире совершенства, а есть только стремление к оному.

Tor
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 05.11.2004 (Пт) 12:17

Сообщение Tor » 25.11.2004 (Чт) 16:52

я вот только не понял на счет второго параметра в методе Save, тама непишут что есть txt или dbf формат

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 25.11.2004 (Чт) 16:57

я вот только не понял на счет второго параметра в методе Save, тама непишут что есть txt или dbf формат


Когда все равно во что сохранять - форматы метода Save ничем не хуже.
Чем XML не устраивает, к примеру?
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Tor
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 05.11.2004 (Пт) 12:17

Сообщение Tor » 25.11.2004 (Чт) 17:06

дело в том, что моя прога должна формировать ответный файл по описаному выше сценарию, а этот файл будет использовать другая прога которая понимает sdf, dbf, txt
т.е. моя прога является посреднеком для другой, т.к. она не знает сруктуру БД
еслибы было всеравно я бы это уже написалбы на делфе.
Заранее отвечаю: делфя не является стандартным средством разработки в моей организации :(

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 25.11.2004 (Чт) 17:21

Ну тогда самое простое - сохрани пустой шаблончик DBF-ки (можно в ресурсах программы) и, когда надо, копируй его в нужный каталог и заполняй.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

ZlydenGL
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 148
Зарегистрирован: 13.08.2004 (Пт) 10:02

Сообщение ZlydenGL » 25.11.2004 (Чт) 17:24

Неа, это уже сложнее чем через текстовик, где всего-то надо пролистать все записи. Хотя, все конечно зависит и от размеров выгрузки.

Tor, тебе много данных надо перекидывать? В мегах?
Покой нам только снится!!! И то редко. Поскольку нет в мире совершенства, а есть только стремление к оному.

Tor
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 05.11.2004 (Пт) 12:17

Сообщение Tor » 25.11.2004 (Чт) 17:40

нет до 1 мега
а если больше, тогда зделаю по шаблону как Andrey Fedorov сказал

ZlydenGL
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 148
Зарегистрирован: 13.08.2004 (Пт) 10:02

Сообщение ZlydenGL » 25.11.2004 (Чт) 17:42

Тогда однозначно в текстовик выгружай по примеру приведенному выше ;)

Удачи!
Покой нам только снится!!! И то редко. Поскольку нет в мире совершенства, а есть только стремление к оному.

codemaster
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 604
Зарегистрирован: 13.02.2004 (Пт) 13:35

Сообщение codemaster » 25.11.2004 (Чт) 17:45

Tor писал(а):нет до 1 мега
а если больше, тогда зделаю по шаблону как Andrey Fedorov сказал


для работы с DBF самое скорострельное - CodeBase
http://www.sequiter.com/ отлично дружит с VB
при малых размерах библ.

ZlydenGL
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 148
Зарегистрирован: 13.08.2004 (Пт) 10:02

Сообщение ZlydenGL » 25.11.2004 (Чт) 17:48

А стоит ли для одномеговой выгрузки еще библиотеки DBF подключать - тем более, что человеку усе едино похоже - текст или dbf?

Я бы и для 4 мегов на dbf не польстился... 10 - еще куда ни шло.
Покой нам только снится!!! И то редко. Поскольку нет в мире совершенства, а есть только стремление к оному.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 25.11.2004 (Чт) 17:48

А можно еще вот так - только что сочинил, вроде работает:

Код: Выделить всё
    Dim r As New ADODB.Recordset
    r.Fields.Append "Поле 1", adInteger, , adFldUnknownUpdatable
    r.Fields.Append "Поле 2", adVarWChar, 50, adFldUnknownUpdatable
    r.Fields.Append "Поле 3", adDate, , adFldUnknownUpdatable
    r.Open
   
    r.AddNew
    r(0) = 1
    r(1) = "Тест 1"
    r(2) = Date
    r.AddNew
    r(0) = 2
    r(1) = "Тест 2"
    r(2) = Now
    r.Update
   
    CreateDbfFromRecordset r, "MyDBF", "C:\DBF\"

....

Private Sub CreateDbfFromRecordset(r As ADODB.Recordset, ByVal DbfName As String, DbfFolder As String)
    Dim cn As New ADODB.Connection, f As ADODB.Field, s As String, sDbfFile As String
    Dim rr As New ADODB.Recordset, i As Integer, ii As Integer
   
    cn.Open "Provider=MSDASQL.1;Data Source=dBASE Files;Initial Catalog=" & DbfFolder

    sDbfFile = DbfFolder & DbfName & ".dbf"
    On Error Resume Next
    GetAttr sDbfFile
    If Err.Number = 0 Then Kill sDbfFile
    On Error GoTo 0
   
    For Each f In r.Fields
        If Len(s) Then s = s & ","
        Select Case f.Type
            Case adUnsignedTinyInt, adSmallInt, adInteger, adSingle, adDouble, adCurrency, adBoolean
                s = s & "[" & f.Name & "] INT"
            Case adDate
                s = s & "[" & f.Name & "] DATE"
            Case adVarChar, adVarWChar, adChar, adWChar
                s = s & "[" & f.Name & "] TEXT(" & f.DefinedSize & ")"
        End Select
    Next f

    cn.Execute "CREATE TABLE " & DbfName & "(" & s & ")"
   
    rr.Open "SELECT * FROM " & DbfName, cn, adOpenStatic, adLockOptimistic
    ii = r.Fields.Count - 1
    Do Until r.EOF
        rr.AddNew
        For i = 0 To ii
            rr(i) = r(i)
        Next i
        rr.Update
        r.MoveNext
    Loop
End Sub
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Tor
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 05.11.2004 (Пт) 12:17

Сообщение Tor » 25.11.2004 (Чт) 18:08

Andrey Fedorov

Всамую точку, я в делфе через ado работаю по такому же принципу
открываю базу через SQL запрос, потом опятьже через SQL создаю новую и загоняю туды уже порлученые данные.
Вот только вопрос как в VB настроить провайдера?

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 26.11.2004 (Пт) 8:56

Вот только вопрос как в VB настроить провайдера?


Что там настраивать? Я ведь рабочий кусок кода привел - там все что надо есть, для создания DBF-файла и импорта в него из Recordset-a.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7

    TopList  
cron