Форум: "Базы";
Текущий архив: 2003.04.14;
Скачать: [xml.tar.bz2];
Вниз---|Ветка была без названия|--- Найти похожие ветки
← →
Huc (2003-03-24 16:12) [0]Здравствуйте, господа.
Делаю перекачку из базы Интербэйс в МССКЛ:
IBQuery1.Open;
MSTable1.Open;
MSTable1.Edit;
MSTable1.First;
IBQuery1.First;
try
while not IBQuery1.Eof do
begin
MSTable1.Append;
MSTable1.FieldByName("npd").AsString := IBQuery1.FieldByName("npd").AsString;
MSTable1.FieldByName("dtpd").AsDatetime := IBQuery1.FieldByName("dtpd").AsDatetime;
MSTable1.FieldByName("dmfo").AsString := IBQuery1.FieldByName("dmfo").AsString;
MSTable1.FieldByName("dacc").AsString := IBQuery1.FieldByName("dacc").AsString;
MSTable1.FieldByName("cmfo").AsString := IBQuery1.FieldByName("cmfo").AsString;
MSTable1.FieldByName("cacc").AsString := IBQuery1.FieldByName("cacc").AsString;
MSTable1.FieldByName("amount").AsFloat := IBQuery1.FieldByName("amount").AsFloat;
MSTable1.FieldByName("crnc").AsString := IBQuery1.FieldByName("codecurr").AsString;
MSTable1.FieldByName("remark").AsString := IBQuery1.FieldByName("remark").AsString;
IBQuery1.Next;
MSTable1.Next;
end;
finally
Application.MessageBox("Alert !!!","AlertMessage",0);
end;
На 20-тысячной записи ругается "Out of memory". Как это побороть ? Или может кто подскажет другой способ перекачки из Интербейс-МС СКЛ Сервер ???
Благодарю за внимание.
← →
Clickmaker (2003-03-24 16:27) [1]IB -> текстовый файл -> MS SQL
А вообще, надо смотреть, в какие файловые форматы умеет экспортировать IB и из каких импортировать MS SQL. Там и стыковать
← →
sniknik (2003-03-24 16:40) [2]MSSQL почти любые форматы баз поддерживает в том числе и текст (был бы OLE DB или ODBC провайдер). Если найдеш к IB подобное, то все выльется в простой запрос, INSERT INTO ... FROM SELECT ...
← →
Huc (2003-03-24 16:49) [3]2Clickmaker:
Не хотелось бы извращаться лишний раз
2sniknik:
Пробовал через TBlobStream, так не выходит, зараза. Хочет именно BlobField видеть. Кто-то говорил, что можно хитро через TDatabase перекинуть. Знать бы как...
← →
Johnmen (2003-03-24 16:53) [4]Во-первых, неизвестно, сколько записей уже было в MSTable1 перед аппендами (причем на клиенте), да еще и добавляется....
Во-2х, MSTable1.Edit; абсолютно бессмысленен...
Ну и самое главное - так перекачку не делают !
← →
Clickmaker (2003-03-24 17:02) [5]Не хотелось бы извращаться лишний раз
Ну, если такая перекачка происходит постоянно, то конечно... А если один раз, то чего такого?
Можно попробовать подбить на это дело источники данных ODBC. А если уж продолжать мучать сам код, то можно попробовать MSTable1.BatchMove
← →
sniknik (2003-03-24 17:13) [6]Clickmaker © (24.03.03 17:02)
> Можно попробовать подбить на это дело источники данных ODBC
если есть ODBC источник к IB, то можно и запрос составить на добавление.
ну к примеру (из Bol, аналогично к любому, лиш бы был, я вот с IB вообще не работал так что не знаю он есть?)
Use OPENROWSET with an object and the OLE DB Provider for ODBC
This example uses the OLE DB Provider for ODBC and the SQL Server ODBC driver to access the authors table in the pubs database on a remote server named seattle1. The provider is initialized with a provider_string specified in the ODBC syntax used by the ODBC provider, and the catalog.schema.object syntax is used to define the row set returned.
USE pubs
GO
SELECT a.*
FROM OPENROWSET("MSDASQL",
"DRIVER={SQL Server};SERVER=seattle1;UID=manager;PWD=MyPass",
pubs.dbo.authors) AS a
ORDER BY a.au_lname, a.au_fname
GO
добавить INSERT ... будет добавление.
← →
Huc (2003-03-24 17:19) [7]2Johnmen:Уточняю, там пусто. Табличка создается заново каждый раз. Используется SQL Server Data Access Components 1.00. Насчет .Edit - Ваша правда.
Ели Вам не трудно, подскажите как нужно ее делать.
2Clickmaker:
Сейчас поковыряюсь с .BatchMove, спасибо за идею.
← →
Johnmen (2003-03-24 17:28) [8]В добавление к вышесказанным ответам, такой, не самый лучший вариант :
в указанном цикле INSERT INTO ... (...) VALUES (:P1,:P2,...)
← →
zacho (2003-03-24 18:58) [9]В IBQuery1 поставь UniDirectional:=true или используй IBSQL и лишняя память жраться не будет.
← →
Desdechado (2003-03-24 20:28) [10]если мучать код, я бы обращался к полям не по имени и не с преобразованием типа, а по номеру и через Value
если код не мучить, то см. Clickmaker © (24.03.03 16:27)
← →
Huc (2003-03-26 13:05) [11]Благодарю всех за советы. Вчера весь день промучался, но добил таки.
Получилось и через OLE DB Provider for ODBC and the SQL Server ODBC driver и с помощью установки UniDirectional:=true. С ОЛЕ быстрее намного, да и необходимость в компонентах Интербэйзовских отпадает. Выберу этот вариант. Правда, база не должна быть эксклюзивно открыта, а то СКЛ-сервер ругается.
Собственно, если кому интересно, привожу пример подключения:
SELECT a.*
FROM OPENROWSET("MSDASQL","DRIVER={INTERSOLV InterBase ODBC Driver (*.gdb)};DSN=PTW;DB=ksyusha:c:\program files\ProFIX\PTW\ptw.gdb;UID=sysdba;PWD=masterkey",
"SELECT * from accname") AS a
GO
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.04.14;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c