![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
вставка данных в dbf [D7, MSSQL, Paradox]
Lexiy © (2006-03-21 10:45:00)вот таким образом загоняю в 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 поделил по полам ...поочередно ... т.е. открыл программу загнал трист закрыл программу открыл еще раз загнал остаток ... прекрасно не вопрос ... а вот сразу не понятки ... может кто знает почему ?
Lexiy (2006-03-31 12:36:00) [1]понял спасибо
sniknik (2006-03-31 11:17:00) [2]> если можете укажите ошибку ..
ADO TableDbf
ADO и Table не совместимы
> кстати у меня вопрос я почему то не могу освободить файл пока не выключу программу
потому что драйвер VFP захватывает файл при SELECT-е (из принципа наверное, другой причены не нашол ;), на самом деле так исторически сложилось, селект в фоксе был для переключения между областями в которых открывались таблици). можно использовать драйвер OLEDB, и вместо SELECT-а делать USE (ODBC это не поддерживает). можно порыть хелп на предмет закрытия таблици в текущей области (исторически это USE в текущей области без параметра... но ODBC это не ...), боюсь команда вообще в скрипты не вынесена (в SQL не представлена) и придется закрывать непосредственно в процедурой из dll (если продолжать юзать ODBC версию драйвера).
Lexiy (2006-03-31 11:03:00) [3]25 я привел кусок кода как я загонял данные в некий файл определенного формата ... вот столкнулся :) .... если можете укажите ошибку ..
кстати у меня вопрос я почему то не могу освободить файл пока не выключу программу ... подключался через адо конект ... пробовал и конект тру фелс :) и даже фри ... компонент работы с табл ммм адо таблица ... аналогично пробавал даже фри и все равно если попытаться открыть файл говорит что только для чтения соответственно держит запись ... как мне правильно прервать транзакцию ?
опять криво ... как могу приношу извинения заранее :)
sniknik (2006-03-31 10:45:00) [4]> Проблема эта существует еще со времен MS FoxPro ДОСовского "разлива".
в BDE? или... где?
я как раз с досовских времен на fox-е писал, дельфи как появилась пробовал и за неприменением оставил, потом вернулся, но fox-са до 2000г(примерно) так и не бросал (поддержка старого). так уж получилось именно досового. а с ODBC/OLEDB драйверами фокса по сих пор не расстаюсь, время от времени приходится работать.
вот c BDE всего пару раз, эпизодически, столкнулся уже гораздо позже как с ADO работал. (понятно многого в нем не знаю. но часто больше чем некоторые, что говорят его знают ;о))
и ни когда не сталкивался с проблемой ограничения записей при вставке... (может не так с ним работал?)
Lexiy (2006-03-31 10:30:00) [5]+23 точнее подготавливаю и проверяю есть ли вообще данные и т.д. и т.п.
Lexiy (2006-03-31 10:29:00) [6]22 спасибо проблема ясна пошел другим путем ... просто файл к сожалению исправить нельзя :) приходится мучиться с тем что дают ... спасибо еще раз
18 ... это я данные беру из некоего запроса :)
Сергей М. (2006-03-31 09:25:00) [7]
> sniknik © (30.03.06 23:37) [21]
> ну в BDE может быть (не знаю)
Проблема эта существует еще со времен MS FoxPro ДОСовского "разлива".
Связана она с ограничением на максимальное кол-во страниц табличного файла, которые блокируются движком при выполнении вставок/модификаций
sniknik (2006-03-30 23:37:00) [8]а... ну в BDE может быть (не знаю)
но в вопросе то ADO - провайдер (по ошибке) Visual FoxPro Driver. т.е. никак не связано (был бы jet там бы хоть както, опосредовано на BDE ссылка...)
да и заявленный "затык" превышает 256 записей...
Mike Kouzmine (2006-03-30 23:13:00) [9]sniknik © (30.03.06 18:05) [19] Он имел ввиду, что бде может имулировать транзакции. При этом количество изменяемых записей в пределах одной транзакции не может быть больше 256.
sniknik (2006-03-30 18:05:00) [10]Сергей М. © (30.03.06 16:03) [16]
> А никак ее не "проскакать".
не надо "ля-ля", у меня уже не первый год работает программа по связке различных бэк/фронт-офисов, и dbf в выгрузке там тоже есть, и цифры там фигурируют не "смешные" - 600 записей, немного поболее. (80-130тыс строк в порядке вещей, это просто одна полная выгрузка на кассу полного справочника)
и никто не жаловался пока.
Mike Kouzmine (2006-03-30 16:07:00) [11]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
объясни, что ты этим хотел сказать. Я не понял.
Sergey13 (2006-03-30 16:06:00) [12]2[16] Сергей М. © (30.03.06 16:03)
А откуда там транзакции то? В DBF то?
Сергей М. (2006-03-30 16:03:00) [13]
> Lexiy (29.03.06 12:25) [9]
А никак ее не "проскакать".
Смирись с тем. что в контексте однойтранзакции ты сможешь вставить/модифицировать/удалить именно то число записей (при данной конкретнойструктуре таблицы), что ты наблюдаешь.
В это плане dbf - это большая засада.
Lexiy (2006-03-30 15:11:00) [14]12 не надо мне гарантий .... просто я пробовал дело не в этом ... я же говорю все записи вставляются .... но идет не понятный глюк если гнать их все сразу ... делим пополам заганяем таким же образом - работает ... единственное что надо сделать для этого просто выключиться и включить программу еще раз ... криво сказал но это имеено так ... и ошибка типа неверный тип данных тут совсем не при чем ... по этому я и говорю что это никак помочь не может потому что все данные я в файл записывал
14 попробую ... такая идея была )
vovnuke (2006-03-30 14:05:00) [15]могу предложить добавлять запись при помощи AppendRecord, но поможет это или нет не знаю.
Mike Kouzmine (2006-03-30 13:32:00) [16]sniknik © (30.03.06 12:54) [12] Я смотрю по ошибке. Такую может давать Вариант переменная, а валуе, насколько я помню, таковой и является.
sniknik (2006-03-30 12:54:00) [17]> извините Михаил а это что нибудь разве изменит ?
т.е. пока тебе не дадут гарантий, что чтото решит проблему, ты и пальцем не пошевелиш?
> не вижу в этом смысла дело явно не в этом
чтобы знать в этом дело или нет, надо как минимум знать в чем именно дело, для сравнения. если ты знаеш в чем оно то зачем спрашиваеш?
один из вариантов чем может помоч точного приведения типов - даты.
информация к размышлению в - mssql тип дата таймв dbf просто дата...
в крайнем случае словиш ошибку непосредственно на конкретном типе.
> или это просто попробуй так ...
если советуют то явно считают, что хоть чемто, это возможно поможет.
Lexiy (2006-03-30 12:20:00) [18]извините Михаил а это что нибудь разве изменит ? или это просто попробуй так ... не вижу в этом смысла дело явно не в этом
Mike Kouzmine (2006-03-29 16:07:00) [19]Попробуй не Value (class EOleException), а определяй тип и пиши
case field.kindof
...... asInteger = .... asInteger;
end;
Lexiy (2006-03-29 12:25:00) [20]Сергей ... вот то что это некая особенность я понял ... а никто не знает как эту особеность можно проскакать ?