Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / как импортировать строки текстового файла в столбцы таблицы / 10 сообщений из 10, страница 1 из 1
25.06.2009, 22:31
    #36060724
Namik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как импортировать строки текстового файла в столбцы таблицы
Доброго Вам времени суток
Уважаемые господа

при наличии времени прошу Вас помочь примером

есть текстовый файл с нижеуказанным содержимым

--------------------------------------------
1Период энеолита заменил период бронзы:
2начиная с конца VI тысячелетия до н.э.
3начиная с конца II тысячелетия до н.э.
4начиная с конца III тысячелетия до н.э.
5начиная с конца IV тысячелетия до н.э.
6начиная с конца XI тысячелетия до н.э.
/
1Период бронзы продолжался до:
2конца I тысячелетия до н.э.
3конца VII тысячелетия до н.э.
4конца III тысячелетия до н.э.
5конца VIII тысячелетия до н.э.
6конца II тысячелетия до н.э.

----------------------------------------------

есть база данных с таблицей test
таблица содержит 6 столбцов


подскажите пожалуйста
как можно сделать так чтобы

при нажатии на кнопку

первая строка файла села в поле таблицы1
вторая в поле таблицы2 и так до символа разделителя "/"
после разделителя все начинается заново

я понимаю что это реализовывается через цикл
но вот сам код импортирования строк в таблицы я не знаю

С Уважением и Благодарностью
Намик
...
Рейтинг: 0 / 0
26.06.2009, 10:15
    #36061119
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как импортировать строки текстового файла в столбцы таблицы
> Автор: Namik
> при наличии времени прошу Вас помочь примером

Алгоритм:
устанавливаем счетчик полей таблицы в 1
открываем таблицу
открываем файл
пока не конец файла, читаем строку
если прочитанная строка содержит "/",
тогда устанавливаем счетчик полей таблицы в 1
иначе
помещаем содержимое прочитанной строки в поле таблицы, в соответствии со счетчиком полей и увеличиваем счетчик
полей на 1
конец пока
закрываем файл
закрываем таблицу


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
26.06.2009, 15:38
    #36061916
klen_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как импортировать строки текстового файла в столбцы таблицы
в двух циклах - нагляднее
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Option Base  1 

Private Type table6
    pole1 As String
    pole2 As String
    pole3 As String
    pole4 As String
    pole5 As String
    pole6 As String
End Type
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
Private Sub Command1_Click()
On Error GoTo err1

Dim buf As String
Dim t() As table6

Dim rFF As Integer:  rFF = FreeFile

Open "C:\TEXT.TXT" For Input As #rFF

Dim i As Byte, z As Long
i =  0 
z =  1 

Do Until EOF(rFF)
    i = i +  1 
    ReDim Preserve t(z)
    Line Input #rFF, buf
    If InStr( 1 , buf, "/") >  0  Then
        i =  0 
        z = z +  1 
    End If
    Select Case i
       Case  1 :      t(z).pole1 = buf
       Case  2 :      t(z).pole2 = buf
       Case  3 :      t(z).pole3 = buf
       Case  4 :      t(z).pole4 = buf
       Case  5 :      t(z).pole5 = buf
       Case  6 :      t(z).pole6 = buf
    End Select
Loop
Close #rFF

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
'допустим есть база db1.mdb и в ней есть шесть таблиц
Dim file_mdb As String:           file_mdb = App.Path & "\db1.mdb"
Dim conn As ADODB.Connection:     Set conn = New ADODB.Connection
Dim rst1 As ADODB.Recordset:      Set rst1 = New ADODB.Recordset
Dim rst2 As ADODB.Recordset:      Set rst2 = New ADODB.Recordset
Dim rst3 As ADODB.Recordset:      Set rst3 = New ADODB.Recordset
Dim rst4 As ADODB.Recordset:      Set rst4 = New ADODB.Recordset
Dim rst5 As ADODB.Recordset:      Set rst5 = New ADODB.Recordset
Dim rst6 As ADODB.Recordset:      Set rst6 = New ADODB.Recordset
 
conn.Provider = "Microsoft.Jet.OLEDB.4.0"   ' Microsoft ActiveX Data Objects 2.7 Library
conn.Open file_mdb, "Admin" ', password

rst1.Open "Таблица1", conn, adOpenDynamic, adLockOptimistic
rst2.Open "Таблица2", conn, adOpenDynamic, adLockOptimistic
rst3.Open "Таблица3", conn, adOpenDynamic, adLockOptimistic
rst4.Open "Таблица4", conn, adOpenDynamic, adLockOptimistic
rst5.Open "Таблица5", conn, adOpenDynamic, adLockOptimistic
rst6.Open "Таблица6", conn, adOpenDynamic, adLockOptimistic

i =  0 
For z =  1  To UBound(t)
    For i =  1  To  6 
        Select Case i
           Case  1 :      rst1.AddNew:    rst1.Fields( 0 ) = t(z).pole1:    rst1.Update
           Case  2 :      rst2.AddNew:    rst2.Fields( 0 ) = t(z).pole2:    rst2.Update
           Case  3 :      rst3.AddNew:    rst3.Fields( 0 ) = t(z).pole3:    rst3.Update
           Case  4 :      rst4.AddNew:    rst4.Fields( 0 ) = t(z).pole4:    rst4.Update
           Case  5 :      rst5.AddNew:    rst5.Fields( 0 ) = t(z).pole5:    rst5.Update
           Case  6 :      rst6.AddNew:    rst6.Fields( 0 ) = t(z).pole6:    rst6.Update
        End Select
    Next
Next

err1:
    If Err.Number <>  0  Then
        MsgBox Err.Description
    End If
    On Error Resume Next
    rst1.Close: Set rst1 = Nothing
    rst2.Close: Set rst2 = Nothing
    rst3.Close: Set rst3 = Nothing
    rst4.Close: Set rst4 = Nothing
    rst5.Close: Set rst5 = Nothing
    rst6.Close: Set rst6 = Nothing
    conn.Close: Set conn = Nothing
    Close
    Err =  0 
End Sub
...
Рейтинг: 0 / 0
26.06.2009, 15:58
    #36062000
klen_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как импортировать строки текстового файла в столбцы таблицы
первый цикл надо переделать, чуть чуть, просто что бы не было лишних действий
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
Private Sub Command1_Click()
On Error GoTo err1

Dim buf As String
Dim t() As table6

Dim rFF As Integer:  rFF = FreeFile

Open "C:\TEXT.TXT" For Input As #rFF

Dim i As Byte, z As Long
i =  0 
z =  1 

ReDim Preserve t(z)

Do Until EOF(rFF)
    i = i +  1 
    Line Input #rFF, buf
    If InStr( 1 , buf, "/") >  0  Then
        i =  0 
        z = z +  1 
        ReDim Preserve t(z)
    End If
    Select Case i
       Case  1 :      t(z).pole1 = buf
       Case  2 :      t(z).pole2 = buf
       Case  3 :      t(z).pole3 = buf
       Case  4 :      t(z).pole4 = buf
       Case  5 :      t(z).pole5 = buf
       Case  6 :      t(z).pole6 = buf
    End Select
Loop
Close #rFF
...
Рейтинг: 0 / 0
26.06.2009, 16:49
    #36062130
Namik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как импортировать строки текстового файла в столбцы таблицы
Благодарю Вас за ответы

Клен
я пытаюсь использовать Ваш пример

однако происходит ошибка с указанием на

Dim t() As table6
сообщение User-defined Type not defined

и еще
у меня всего одна таблица в базе но в этой таблице 6 столбцов

если я правильно понимаю то в Вашем примере надо удалить

---------------------------- вот это
rst2.Open "Таблица2", conn, adOpenDynamic, adLockOptimistic
rst3.Open "Таблица3", conn, adOpenDynamic, adLockOptimistic
rst4.Open "Таблица4", conn, adOpenDynamic, adLockOptimistic
rst5.Open "Таблица5", conn, adOpenDynamic, adLockOptimistic
rst6.Open "Таблица6", conn, adOpenDynamic, adLockOptimistic

----------------------------и это изменить
Case 1: rst1.AddNew: rst1.Fields(1) = t(z).pole1: rst1.Update
Case 2: rst1.AddNew: rst2.Fields(2) = t(z).pole2: rst2.Update
Case 3: rst1.AddNew: rst3.Fields(3) = t(z).pole3: rst3.Update
Case 4: rst1.AddNew: rst4.Fields(4) = t(z).pole4: rst4.Update
Case 5: rst1.AddNew: rst5.Fields(5) = t(z).pole5: rst5.Update
Case 6: rst1.AddNew: rst6.Fields(6) = t(z).pole6: rst6.Update

или я все перепутал

С Уважением и Благодарностью
Намик
...
Рейтинг: 0 / 0
26.06.2009, 21:38
    #36062453
klen_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как импортировать строки текстового файла в столбцы таблицы
эта строка должна быть в начале модуля формы
Код: plaintext
Option Base  1 

эти строки должны быть перед процедурами (в данном случае после Option Base)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Private Type table6
    pole1 As String
    pole2 As String
    pole3 As String
    pole4 As String
    pole5 As String
    pole6 As String
End Type

правда, смешно, я не знаю почему мне так показалось, что аж 6 таблиц

Вы правильно написали, что надо удалить и что исправить, если первое поле таблицы какой-нибудь ключ "ID_ ".
А если такого ключа нет, то начинайте с нулевого поля Fields(0). "Option Base 1" не влияет на метод Fields.

Я честно говоря, надеюсь, кто-нибудь поправит код или выложит свой вариант, как более компактный.
...
Рейтинг: 0 / 0
26.06.2009, 21:58
    #36062460
Namik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как импортировать строки текстового файла в столбцы таблицы
Благодарю Вас за помощь

у меня был вот такой пример (может Вам это будет интересно)

-----------------------------------------------------
strSQL = "SELECT * FROM fio"

Set db = OpenDatabase("nam1.mdb")
Set rs = db.OpenRecordset(strSQL)
strSQL = "Delete From fio"
db.Execute strSQL
Open FileName() For Binary As #1
txt = Space(LOF(1))
Get #1, , txt
Close #1

rows = Split(txt, vbCrLf)

For i = 0 To UBound(rows)
cols = Split(rows(i), vbCrLf)
If rows(i) = "/" Then
MsgBox "1"
End If
rs.AddNew
For j = 0 To rows(i) = "/"
rs(j) = cols(j)
Next
rs.Update
Next
rs.Close
db.Close
Set rs = Nothing
Set db = Nothing

--------------------------------------------------
но в как Вы видите в даном примере строки вводимые в столбцы таблицы идудт через пробел

текст-для-столбца1 текст-для-столбца2 текст-для-столбца3
текст-для-столбца1 текст-для-столбца2 текст-для-столбца3
текст-для-столбца1 текст-для-столбца2 текст-для-столбца3
текст-для-столбца1 текст-для-столбца2 текст-для-столбца3

сколько пробелов столько и столбцов

благодарю Вас за ваш пример

С Уважением и Благодарностью
Намик
...
Рейтинг: 0 / 0
29.06.2009, 09:44
    #36063796
AndrF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как импортировать строки текстового файла в столбцы таблицы
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Option Explicit
Пример загрузки текстового файла приведенного автором ветки в Recordset:

Public Sub Main()
    Dim cn As New ADODB.Connection, r As New ADODB.Recordset
    
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
          "Data Source=""" & App.Path & """;" & _
          "Extended Properties=Text"

    r.Open "SELECT * FROM File.txt", cn
    Do Until r.EOF
        Debug.Print r( 0 ).Name & ": " & r( 0 ), r( 1 ).Name & ": " & r( 1 )
        r.MoveNext
    Loop
End Sub

Ну и содержание файла schema.ini:


[File.txt]
ColNameHeader=False
CharacterSet=1251
Format=FixedLength
Col1=Номер Text Width 1
Col2=Вопрос Text Width 50

Проект с примером - приложен...
...
Рейтинг: 0 / 0
29.06.2009, 09:48
    #36063802
AndrF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как импортировать строки текстового файла в столбцы таблицы
Ну а вставка в другую таблицу - оформить SELECT с INTO ...

Циклы, Split-ы и подобная дребедень тут даром не нужны ;)
...
Рейтинг: 0 / 0
29.06.2009, 15:56
    #36064617
Namik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как импортировать строки текстового файла в столбцы таблицы
понял

Большое Вам спасибо
Благодарю всех за помощь и направление

С уважением
Намик
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / как импортировать строки текстового файла в столбцы таблицы / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]