Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

вставка данных в dbf [D7, MSSQL, Paradox]


Страницы:   1 2

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]

Сергей ... вот то что это некая особенность я понял ... а никто не знает как эту особеность можно проскакать ?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо