Помогите новичку! Ну пожааалуйста!

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
bashobn
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 25.05.2008 (Вс) 10:37

Помогите новичку! Ну пожааалуйста!

Сообщение bashobn » 25.05.2008 (Вс) 10:46

Проблема такая:

Есть две базы *.mdb с одинаковой структурой, но в одной есть данные, а другая чистая.

Вопрос: как можно перекинуть данные из заполненной базы в чистую?

Примечание: Пробовал мудрить с recordsetом через sql-инструкцию: записи выбираются...а вот как их скопировать и вставить оказалось проблемой...

Помогите пожалуйста!

[Хакер] :: Устное предупреждение. Во-первых, ты ошибся разделом. Во-вторых, давать темам подобные названия запрещено правилами. В следующий раз, предупреждение будет не устным.

bashobn
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 25.05.2008 (Вс) 10:37

Сообщение bashobn » 25.05.2008 (Вс) 22:17

Извините, уважаемый Хакер! Больше не буду!

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 25.05.2008 (Вс) 22:18

Что именно вызывает проблемы у тебя в организации вставки?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

bashobn
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 25.05.2008 (Вс) 10:37

Сообщение bashobn » 25.05.2008 (Вс) 22:29

Вообще технология копирования. Мне бы хотя бы знать, какое свойство, допустим от .Recordset применить (мне кажется, что один фиг через него надо делать).

У меня задумка такая: Открыть одну базу, присвоить 1 recordset, потом открыть вторую с другим рекордом, приравнять 2 к 1 и записать.
А вот как сделать вопрос стал... Вот...

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Сообщение iGrok » 26.05.2008 (Пн) 14:40

А зачем изобретать велосипед?

1) А почему, к примеру, тупо не скопировать файл?
2) В аксессе, прилинковать к чистой БД таблицы из заполненной. Далее Ctrl-C - Ctrl-V. При вставке указываешь имя таблицы д/заполнения и выбираешь "добавить данные в таблицу".

Или нужен всё-таки программный способ?
label:
cli
jmp label

bashobn
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 25.05.2008 (Вс) 10:37

Сообщение bashobn » 26.05.2008 (Пн) 22:31

чистая база с некоторыми изменениями в таблице (добавлено поле, которое ссылается на другую таблицу, )как обновленная идет...Но юзеру же не объяснишь как что, поэтому нужна прога,макрос,запрос или подобное.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Сообщение iGrok » 27.05.2008 (Вт) 15:18

Угу. Тогда понял.

Открываешь в рекордсетах обе таблицы, и бежишь по записям, копируя все поля. Собственно, в чём сложность-то? Копируя - т.е. читая из одного и записывая в другой. Никакого метода для быстрого копирования у рекордсета нету.

Впрочем, м.б. тебе есть смысл копнуть в сторону SELECT INTO?
Скорей всего это тебя спасёт. )
label:
cli
jmp label

bashobn
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 25.05.2008 (Вс) 10:37

Сообщение bashobn » 28.05.2008 (Ср) 13:37

Код: Выделить всё
Private Sub Command1_Click()
Dim i As Integer
Dim dt As String
Data1.DatabaseName = "c:\privcom\main.mdb"
Data2.DatabaseName = "c:\privcom\main_change.mdb"
Data1.Refresh
Data2.Refresh
dt = "PrUsed"
Data1.RecordSource = "select * from " & dt
Data1.Refresh
Data2.RecordSource = "select * from " & dt
Data2.Refresh
Do While Not Data1.Recordset.EOF
For i = 0 To Data1.Recordset.Fields.Count - 1
If Not Data1.Recordset.Fields(i) = "" Then
Data2.Recordset.AddNew
Data2.Recordset.Update
End If
Next i
Data1.Recordset.MoveNext
Loop
End Sub


Единственное что не знаю что вставить между Addnew и Update...

Вообще из такого моего произведения может что получиться?
Или есть варианты получше?

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Сообщение iGrok » 28.05.2008 (Ср) 14:10

Лучший вариант - копать SELECT INTO (sql)
Тогда за тебя всё сделает движок БД.

А так..
Код: Выделить всё

Do While Not Data1.Recordset.EOF

    Data2.Recordset.AddNew

    For i = 0 To Data1.Recordset.Fields.Count - 1

    If Not IsNull(Data1.Recordset.Fields(i)) Then
        Data2.Recordset.Fields(i) = Data1.Recordset.Fields(i)
    End If

    Next i

    Data2.Recordset.Update

    Data1.Recordset.MoveNext
Loop

Но вообще код какой-то.. Странный.
Думается мне, работать оно будет кривовато..
Если порядок полей поменялся, так и вообще получишь полный бред.
Несколько правильней было бы сверять имена полей..

.Fields("FieldName")

Но более правильным, и менее геморным всё равно остаётся вариант с запросом...
Последний раз редактировалось iGrok 28.05.2008 (Ср) 14:15, всего редактировалось 1 раз.
label:
cli
jmp label

bashobn
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 25.05.2008 (Вс) 10:37

Сообщение bashobn » 29.05.2008 (Чт) 7:26

GREAT THANKS to iGrok!!! Your name will be include in names of developers.

В аксесе создал макрос с запросом

INSERT INTO TableName IN Database.location SELECT * FROM TableName

Всё работает!!! :D :D :D :D :D :D :D :D :D :D :D :D :D

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Сообщение iGrok » 29.05.2008 (Чт) 11:12

Ой. Нифига ж себе. 0.o

Да не за что. )
label:
cli
jmp label


Вернуться в Базы данных

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

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

    TopList