Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.011 c
14-44384
copyr25
2003-03-26 18:20
2003.04.14
Сегодня по НТВ в 18:04, в новостях передали, что отныне


6-44306
ev
2003-02-20 16:26
2003.04.14
snmp


1-44273
Serega
2003-04-02 16:16
2003.04.14
Извлечь avi-шку из res-файла, включенного в exe-шник.


6-44313
_sMile
2003-02-22 21:24
2003.04.14
Как передать Bitmap из TImage, используя сокеты?


6-44311
mc Antoha
2003-02-21 20:28
2003.04.14
ClientSocket





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский