Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.014 c
3-1143784267
manevil
2006-03-31 09:51
2006.05.21
проблема с подключением к БД IB


15-1145988181
Fenik
2006-04-25 22:03
2006.05.21
Хочу найти песню, хотя бы название и автора.


1-1144417536
Steplerr
2006-04-07 17:45
2006.05.21
32-битные иконки в TreeView - как?


3-1143359997
beglec
2006-03-26 11:59
2006.05.21
Проблема с инстяляцией на Win2003 Server


2-1146916420
mr1Andersen
2006-05-06 15:53
2006.05.21
Подскажите, пожалуйста, как лучше сделать:





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский