|
#1
|
|||
|
|||
MySQL и Access
Ситуация такая, есть сайт использует базу MySQL, как мне данный из базы перенести в базу Access? так сказать импортировать....
|
#2
|
||||
|
||||
Поставьте драйер MySQL ODBC, подключайтесь к базе и импортируйте на здоровье.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#3
|
|||
|
|||
Цитата:
|
#4
|
|||
|
|||
вот нашел как подлючиться к базе и вывод ее в DBGrid(все работает)
смотреть тут , не подскажете как теперь из DBGrid данные перенести в таблицу Access? |
#5
|
||||
|
||||
Наверное так:
Теперь вам для автоматизации процесса нужно определится как получить описания таблиц и индексов вашей MySQL-базы. Потом на основании этой инфы сгенерить таблицы,индексы уже в акцесе. И для каждой таблички из вашего MySQL-списка сделать обход данных с копированием в акцес. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#6
|
|||
|
|||
Цитата:
Код:
procedure TForm1.DBGrid1CellClick(Column: TColumn); begin form1.Label1.Caption:=form1.DBGrid1.Fields[1].AsString; form1.Label2.Caption:=form1.DBGrid1.Fields[2].AsString; end; end. Код:
Form1.AdoQuery1.Sql.clear; Form1.ADOQuery1.SQL.Add('INSERT INTO new (Test1,Test2)'); Form2.ADOQuery2.SQL.Add('VALUES ('''+label1.Caption+''','''+label1.Caption+''')'); Form2.ADOQuery2.ExecSQL; но тоже только одно значение, далее как то надо сделать запрос на удаление этой записи из базы на сервере (MySQL) Код:
procedure TForm1.Button2Click(Sender: TObject); begin SimpleDataSet1.DataSet.CommandText:= 'delete from tnews where title='''+label1.Caption+'''' ; end; далее можно использовать для перехода курсора DBNavigator на следующию строчку в DBGrid Код:
procedure TForm1.Button3Click(Sender: TObject); begin DBNavigator1.BtnClick(nbNext); end; .....в проблема в том чтобы сделать это все в одном цикле, грубо говоря по нажатию одной кнопки и длилось до тех пор пока база будет пустой (MySQL) и в конце выдало бы сообщение типо все данные перенесены..... |
#7
|
||||
|
||||
DBGrid1 нужен только для отображения данных, для экспорта/импорта данных он вам нафик не нужен. Если речь идет об одной таблице, то можно все и ручками сделать, сгенерить в MySQL SQL-скрипт для создания таблицы и данных в ней, немножко адаптировать под Акцес и выполнить его в Акцесе. Но если у вас более одной таблицы, если вы хотите это принципиально сделать в Дельфи, то тогда по моему первому варианту.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#8
|
|||
|
|||
Цитата:
Последний раз редактировалось жекаизжека, 10.10.2009 в 23:08. |
#9
|
||||
|
||||
Операция разовая, или планируется это делать периодически? Сам себе отвечаю, скорее всего периодическая.
Тогда можно пойти самым коротким путем в расчете на то-что структура таблички на MySQL не будет менятся со временем. 1. Создать аналогичную по структуре табличку. Можно ручками, а можно и сгенрить скрипт на создание данной таблички в MySQL и как я уже писал ранее, адаптировать его под акцес. 2. Открыть запрос на получение всех данных за определенный период из MySQL. 3. Открыть таблю из акцеса. 4. Тупым обходом данных запроса из MySQL скопировать данные в акцесс. 5. Все. Открывать данные вы научились, этот шаг пропустим. Обход будет выглядеть так: Код:
while not SimpleDataSet1.Eof do begin AdoTable1.Append; for i := 0 to SimpleDataSet1.FieldCount - 1 do try AdoTable1.Fields[i].Value := SimpleDataSet1.Fields[i].Value; except AdoTable1.Fields[i].Value := null; end; AdoTable1.Post; SimpleDataSet1.Next; end; Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. Последний раз редактировалось Страдалецъ, 11.10.2009 в 00:33. |
#10
|
|||
|
|||
а как можно сделать проверку если есть нет данных то сообщение, есть то выполнение, и после переноса удалялись все данные из таблицы....есть не сложно
|
#11
|
||||
|
||||
Да,Нет,Может быть...
Переведите на более понятный русский - понял только половину из вашего сообщения. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#12
|
|||
|
|||
извиняюсь за написанно просто уже 3 день что то не спиться...как мне очисть таблицу MYSQL после копирования данный в таблицу Access и сделать проверку таблицы есть в ней данные или нет, если есть то выполнять копирование если нет тогда сообщить что она пустая
|
#13
|
||||
|
||||
Ага, значит у вас стоит задача постоянной подкачки данных.
Тогда нам необходимо поле или группа полей выборку по которому мы будем делать. Допустим таковым является Поле-счетчик. Тогда делаем выборку по такому полю в акцесе: Код:
Select Max(ID) as MaxID from MyTable; Код:
Select * from MyTable where ID>MaxID Код:
Delete from MyTable where ID>MaxID Но эта схема будет работать для новых данных, а вот если речь идет об изменениях, тогда вам надо в таблице иметь соответствующие поля - например ModifyDate,ModifyTime. Тогда будет так: Код:
Select * from MyTable where ID>MaxID or (ModifyDate>=:ModifyDate and ModifyTime>=:ModifyTime) Код:
Delete from MyTable where ID>MaxID or (ModifyDate>=:ModifyDate and ModifyTime>=:ModifyTime) Вот где-то в таком ключе. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. Последний раз редактировалось Страдалецъ, 12.10.2009 в 08:13. |
#14
|
|||
|
|||
не удаляется..может не там его вставляю...хотя после экспорта сразуже.....
|
#15
|
||||
|
||||
Показывайте, как вы это делаете.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |