Форум: "Базы";
Текущий архив: 2006.05.21;
Скачать: [xml.tar.bz2];
Внизвставка данных в dbf Найти похожие ветки
← →
Lexiy (2006-03-21 10:45) [0]вот таким образом загоняю в dbf файл данные
var
i, j: integer;
Begin
try
ProgressBarWork.Step := 1;
ProgressBarWork.Position := 0;
Querys.First;
if not Querys.Eof then
begin
ADOTableDbf.TableName := "bnk";
ADOTableDbf.Active := True;
i := Querys.FieldCount - 1;
Querys.First;
while not Querys.eof do
begin
ADOTableDbf.Insert;
for j:=0 to i do
begin
ADOTableDbf.Fields[j].Value := Querys.Fields[j].Value;
end;
ProgressBarWork.StepIt;
Querys.Next;
end;
end
else
begin
Application.MessageBox("Нет данных для загрузки в файл", "Загрузка");
end;
ADOTableDbf.Post;
Result := True;
except
Result := False;
загоняется порядка 530-540 строк а дальше баг .... в чем ошибка ? проверял по отдельности ... записей у меня приблизительно 600 поделил по полам ...поочередно ... т.е. открыл программу загнал трист закрыл программу открыл еще раз загнал остаток ... прекрасно не вопрос ... а вот сразу не понятки ... может кто знает почему ?
← →
Sergey13 © (2006-03-21 10:57) [1]> а дальше баг ....
Какой?
>в чем ошибка ?
Какая?
Не мешало бы постить после инсерта.
← →
Lexiy (2006-03-21 11:03) [2]да постил я после инсерта ... это просто после всех моих разбирательств на место не поставил .. спасибо это исправил но ошибка все равно осталось
ошибка звучит так
Project CreateDbf.exe raised exception class EOleException with message "[Microsoft][ODBC Visual FoxPro Driver]Variable "Q535P92" is not found
← →
Lexiy (2006-03-21 11:04) [3]иногда бывает Р95 или 93
непонятный момент самое главное исключительно на количестве записей больше 530
← →
Lexiy (2006-03-21 11:12) [4]ну хорошо ... может тогда кто знает а как отпустить файл dbf после всех вот этих вставок ... просто если не закрываю мою програмку я пытаюсь его просмотреть мне говорят что он занят ... и бла бла бла можно только почитать
← →
stone © (2006-03-21 11:55) [5]
> вот таким образом загоняю в dbf файл данные
insert into OpenDataSource (""Microsoft.Jet.OLEDB.4.0"",""Data Source="C:\MyDir";Extended properties=dBase IV"")...MyTable (Field1...) select Field1... from MyTable
← →
Сергей М. © (2006-03-21 12:13) [6]Post() следует вызывать после каждого Insert() !
← →
sniknik © (2006-03-21 12:30) [7]> Post() следует вызывать после каждого Insert() !
вовсе не обязательно, одного раза в конце цикла достаточно (желательно с проверкой на состояние датасета), т.к. он и так вызывается многими командами автоматом (в самом Insert проверка и вызов например есть).
← →
Сергей М. © (2006-03-21 13:12) [8]
> sniknik © (21.03.06 12:30) [7]
> вовсе не обязательно
"следует" <> "обязательно требуется"
А по поводу "магического" числа 530 - оно могло быть и другим .. Зависит от размера записи в байтах .. Это - особенности реализации DBF-движка
← →
Lexiy (2006-03-29 12:25) [9]Сергей ... вот то что это некая особенность я понял ... а никто не знает как эту особеность можно проскакать ?
← →
Mike Kouzmine © (2006-03-29 16:07) [10]Попробуй не Value (class EOleException), а определяй тип и пиши
case field.kindof
...... asInteger = .... asInteger;
end;
← →
Lexiy (2006-03-30 12:20) [11]извините Михаил а это что нибудь разве изменит ? или это просто попробуй так ... не вижу в этом смысла дело явно не в этом
← →
sniknik © (2006-03-30 12:54) [12]> извините Михаил а это что нибудь разве изменит ?
т.е. пока тебе не дадут гарантий, что чтото решит проблему, ты и пальцем не пошевелиш?
> не вижу в этом смысла дело явно не в этом
чтобы знать в этом дело или нет, надо как минимум знать в чем именно дело, для сравнения. если ты знаеш в чем оно то зачем спрашиваеш?
один из вариантов чем может помоч точного приведения типов - даты.
информация к размышлению в - mssql тип дататайм в dbf просто дата...
в крайнем случае словиш ошибку непосредственно на конкретном типе.
> или это просто попробуй так ...
если советуют то явно считают, что хоть чемто, это возможно поможет.
← →
Mike Kouzmine © (2006-03-30 13:32) [13]sniknik © (30.03.06 12:54) [12] Я смотрю по ошибке. Такую может давать Вариант переменная, а валуе, насколько я помню, таковой и является.
← →
vovnuke © (2006-03-30 14:05) [14]могу предложить добавлять запись при помощи AppendRecord, но поможет это или нет не знаю.
← →
Lexiy (2006-03-30 15:11) [15]12 не надо мне гарантий .... просто я пробовал дело не в этом ... я же говорю все записи вставляются .... но идет не понятный глюк если гнать их все сразу ... делим пополам заганяем таким же образом - работает ... единственное что надо сделать для этого просто выключиться и включить программу еще раз ... криво сказал но это имеено так ... и ошибка типа неверный тип данных тут совсем не при чем ... по этому я и говорю что это никак помочь не может потому что все данные я в файл записывал
14 попробую ... такая идея была )
← →
Сергей М. © (2006-03-30 16:03) [16]
> Lexiy (29.03.06 12:25) [9]
А никак ее не "проскакать".
Смирись с тем. что в контексте одной транзакции ты сможешь вставить/модифицировать/удалить именно то число записей (при данной конкретной структуре таблицы), что ты наблюдаешь.
В это плане dbf - это большая засада.
← →
Sergey13 © (2006-03-30 16:06) [17]2[16] Сергей М. © (30.03.06 16:03)
А откуда там транзакции то? В DBF то?
← →
Mike Kouzmine © (2006-03-30 16:07) [18]Lexiy (30.03.06 15:11) [15]
try
ProgressBarWork.Step := 1;
ProgressBarWork.Position := 0;
Querys.First;
if not Querys.Eof then
begin
ADOTableDbf.TableName := "bnk";
ADOTableDbf.Active := True;
i := Querys.FieldCount - 1;
Querys.First;
while not Querys.eof do
объясни, что ты этим хотел сказать. Я не понял.
← →
sniknik © (2006-03-30 18:05) [19]Сергей М. © (30.03.06 16:03) [16]
> А никак ее не "проскакать".
не надо "ля-ля", у меня уже не первый год работает программа по связке различных бэк/фронт-офисов, и dbf в выгрузке там тоже есть, и цифры там фигурируют не "смешные" - 600 записей, немного поболее. (80-130тыс строк в порядке вещей, это просто одна полная выгрузка на кассу полного справочника)
и никто не жаловался пока.
← →
Mike Kouzmine © (2006-03-30 23:13) [20]sniknik © (30.03.06 18:05) [19] Он имел ввиду, что бде может имулировать транзакции. При этом количество изменяемых записей в пределах одной транзакции не может быть больше 256.
← →
sniknik © (2006-03-30 23:37) [21]а... ну в BDE может быть (не знаю)
но в вопросе то ADO - провайдер (по ошибке) Visual FoxPro Driver. т.е. никак не связано (был бы jet там бы хоть както, опосредовано на BDE ссылка...)
да и заявленный "затык" превышает 256 записей...
← →
Сергей М. © (2006-03-31 09:25) [22]
> sniknik © (30.03.06 23:37) [21]
> ну в BDE может быть (не знаю)
Проблема эта существует еще со времен MS FoxPro ДОСовского "разлива".
Связана она с ограничением на максимальное кол-во страниц табличного файла, которые блокируются движком при выполнении вставок/модификаций
← →
Lexiy (2006-03-31 10:29) [23]22 спасибо проблема ясна пошел другим путем ... просто файл к сожалению исправить нельзя :) приходится мучиться с тем что дают ... спасибо еще раз
18 ... это я данные беру из некоего запроса :)
← →
Lexiy (2006-03-31 10:30) [24]+23 точнее подготавливаю и проверяю есть ли вообще данные и т.д. и т.п.
← →
sniknik © (2006-03-31 10:45) [25]> Проблема эта существует еще со времен MS FoxPro ДОСовского "разлива".
в BDE? или... где?
я как раз с досовских времен на fox-е писал, дельфи как появилась пробовал и за неприменением оставил, потом вернулся, но fox-са до 2000г(примерно) так и не бросал (поддержка старого). так уж получилось именно досового. а с ODBC/OLEDB драйверами фокса по сих пор не расстаюсь, время от времени приходится работать.
вот c BDE всего пару раз, эпизодически, столкнулся уже гораздо позже как с ADO работал. (понятно многого в нем не знаю. но часто больше чем некоторые, что говорят его знают ;о))
и ни когда не сталкивался с проблемой ограничения записей при вставке... (может не так с ним работал?)
← →
Lexiy (2006-03-31 11:03) [26]25 я привел кусок кода как я загонял данные в некий файл определенного формата ... вот столкнулся :) .... если можете укажите ошибку ..
кстати у меня вопрос я почему то не могу освободить файл пока не выключу программу ... подключался через адо конект ... пробовал и конект тру фелс :) и даже фри ... компонент работы с табл ммм адо таблица ... аналогично пробавал даже фри и все равно если попытаться открыть файл говорит что только для чтения соответственно держит запись ... как мне правильно прервать транзакцию ?
опять криво ... как могу приношу извинения заранее :)
← →
sniknik © (2006-03-31 11:17) [27]> если можете укажите ошибку ..
ADOTableDbf
ADO и Table не совместимы
> кстати у меня вопрос я почему то не могу освободить файл пока не выключу программу
потому что драйвер VFP захватывает файл при SELECT-е (из принципа наверное, другой причены не нашол ;), на самом деле так исторически сложилось, селект в фоксе был для переключения между областями в которых открывались таблици). можно использовать драйвер OLEDB, и вместо SELECT-а делать USE (ODBC это не поддерживает). можно порыть хелп на предмет закрытия таблици в текущей области (исторически это USE в текущей области без параметра... но ODBC это не ...), боюсь команда вообще в скрипты не вынесена (в SQL не представлена) и придется закрывать непосредственно в процедурой из dll (если продолжать юзать ODBC версию драйвера).
← →
Lexiy (2006-03-31 12:36) [28]понял спасибо
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2006.05.21;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.022 c