Автор Тема: Lazarus (Free Pascal) и база данни  (Прочетена 3198 пъти)

laskov

  • Напреднали
  • *****
  • Публикации: 3166
    • Профил
Lazarus (Free Pascal) и база данни
« -: Apr 06, 2011, 12:00 »
Импортирам dbf (MyDbf) файл в празна SQL (ZQuery1) таблица:
Цитат
  if ZQuery1.BOF and ZQuery1.EOF then
    begin
     MyDbf.First;
     while not MyDbf.EOF do
       begin
         ZQuery1.Append;
         ZQuery1.FieldValues['N'] := MyDbf.FieldValues['N'];
         ZQuery1.FieldValues['DATA'] := MyDbf.FieldValues['DATA'];
         MyDbf.Next;
       end;
       ZQuery1.Post;
    end;
Преди изпълнението MyDbf.RecordCount - ZQuery1.RecordCount = 40257, а след изпълнението е 702. Импортират се 39555 записа.
 Сумите на N в едната и в другата база са еднакви.
 Отварям dbf файла с друга програма - според нея броят на записите е 39555, но според FoxPro са 40257.
Моля, посъветвайте ме как да открия причината за несъответствието в броя на записите!
« Последна редакция: Apr 06, 2011, 18:59 от laskov »
Активен

Не си мислете, че понеже Вие мислите правилно, всички мислят като Вас! Затова, когато има избори, идете и гласувайте, за да не сте изненадани после от резултата, и за да не твърди всяка партия, че тя е спечелила, а Б.Б. (С.С., ...) е загубил, а трети да управлява.  Наздраве!  [_]3

laskov

  • Напреднали
  • *****
  • Публикации: 3166
    • Профил
Re: Lazarus (Free Pascal) и база данни
« Отговор #1 -: Apr 06, 2011, 18:57 »
Направих следната проверка:
Цитат
  MyDbf.First;
  ZQuery1.First;
  while (not MyDbf.EOF) and (ZQuery1.FieldValues['N'] = MyDbf.FieldValues['N']) and (ZQuery1.FieldValues['DATA'] = MyDbf.FieldValues['DATA']) do
     begin
         MyDbf.Next;
         ZQuery1.Next;
     end;
и цикълът се изпълнява докато достигне MyDbf.EOF and ZQuery1.EOF , което трябва да означава, че (това, което се чете от) двете таблици са идентични.
Дали може да се окаже, че в dbf-а има записи, маркирани за изтриване?
« Последна редакция: Apr 06, 2011, 19:09 от laskov »
Активен

Не си мислете, че понеже Вие мислите правилно, всички мислят като Вас! Затова, когато има избори, идете и гласувайте, за да не сте изненадани после от резултата, и за да не твърди всяка партия, че тя е спечелила, а Б.Б. (С.С., ...) е загубил, а трети да управлява.  Наздраве!  [_]3

jet

  • Напреднали
  • *****
  • Публикации: 3473
  • Distribution: debian
  • Window Manager: kde
    • Профил
Re: Lazarus (Free Pascal) и база данни
« Отговор #2 -: Apr 06, 2011, 19:56 »
пробвай във fox pro
set delete on
и тогава брой записите, после

set delete off
и пак ги преброй

Активен

..⢀⣴⠾⠻⢶⣦⠀
  ⣾⠁⢠⠒⠀⣿⡁
  ⢿⡄⠘⠷⠚⠋
  ⠈⠳⣄⠀⠀⠀⠀  Debian, the universal operating system.

laskov

  • Напреднали
  • *****
  • Публикации: 3166
    • Профил
Re: Lazarus (Free Pascal) и база данни
« Отговор #3 -: Apr 07, 2011, 11:18 »
Тези команди FoxPro-то ги хареса, но аз не видях разлика в бройката на записите. Не се и замислих много, ами направих едно PACK и истината лъсна :) . Благодаря!
Активен

Не си мислете, че понеже Вие мислите правилно, всички мислят като Вас! Затова, когато има избори, идете и гласувайте, за да не сте изненадани после от резултата, и за да не твърди всяка партия, че тя е спечелила, а Б.Б. (С.С., ...) е загубил, а трети да управлява.  Наздраве!  [_]3

laskov

  • Напреднали
  • *****
  • Публикации: 3166
    • Профил
Re: Lazarus (Free Pascal) и база данни
« Отговор #4 -: Apr 14, 2011, 11:10 »
Нов проблем. Опитвам се да обработя един текст на кирилица, UTF-8, но се оказа, че това с Lazarus не е лесна работа. Ето как успях да направя аналог на MidStr()
Цитат
procedure TForm1.Button1Click(Sender: TObject);
  var P : PChar = 'Това е стринг, завършващ на 0';
begin
  Memo1.Append(StrPos(P, 'стри'));
  Memo1.Append(StrPas(@Memo1.Lines.ValueFromIndex[0][7]));
  P := @Memo1.Lines.ValueFromIndex[1][1];
  (P + 8)^ := #0;
  Memo1.Append(StrPas(P));
end;
И резултатът е
Цитат
стринг, завършващ на 0
инг, завършващ на 0
инг,
Но в зависимост от съдържанието на стринга, първият и/или последният символ може да не са коректни.
Има ли по-свястен начин?

Освен това, направих промени в една от библиотеките му. Той разбира, че е променена и я записва, но не я компилира! Как да му кажа да я компилира?
« Последна редакция: Apr 14, 2011, 17:40 от laskov »
Активен

Не си мислете, че понеже Вие мислите правилно, всички мислят като Вас! Затова, когато има избори, идете и гласувайте, за да не сте изненадани после от резултата, и за да не твърди всяка партия, че тя е спечелила, а Б.Б. (С.С., ...) е загубил, а трети да управлява.  Наздраве!  [_]3

laskov

  • Напреднали
  • *****
  • Публикации: 3166
    • Профил
Re: Lazarus (Free Pascal) и база данни
« Отговор #5 -: Dec 05, 2012, 12:49 »
Проблемите по-горе бяха решени. Сега имам следния въпрос:

Имам база данни и навигатор: TDBNavigator. След цъкване върху бутоните nbInsert или nbEdit работещият с програмата трябва да продължи с въвеждане на данни или с цъкване върху nbPost или nbCancel от навигатора. Но не е проблем той да цъкне върху друг обект, който няма връзка с горните действия.
Как се решава този проблем?

Май намерих решение: Ползват се TGroupBox. Ако всичко, което е свързано с въпросната таблица от базата данни е в GroupBox1, а всичко останало в GroupBox2, то
Цитат
procedure TForm1.DBNavigator1Click(Sender: TObject; Button: TDBNavButtonType);
begin
  case Button of
    nbInsert, nbEdit    : GroupBox2.Enabled := False;
    nbCancel, nbPost  : GroupBox2.Enabled := True;
  end;
end;
« Последна редакция: Dec 05, 2012, 13:09 от laskov »
Активен

Не си мислете, че понеже Вие мислите правилно, всички мислят като Вас! Затова, когато има избори, идете и гласувайте, за да не сте изненадани после от резултата, и за да не твърди всяка партия, че тя е спечелила, а Б.Б. (С.С., ...) е загубил, а трети да управлява.  Наздраве!  [_]3

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
Pascal
Общ форум
bobitu 0 970 Последна публикация Apr 27, 2005, 17:55
от bobitu
Lazarus
Общ форум
gotha 3 2202 Последна публикация Apr 13, 2007, 21:05
от gotha
Lazarus
Общ форум
l_fen 1 2266 Последна публикация May 23, 2008, 09:18
от runtime
Free pascal String2Hex
Общ форум
runtime 2 1381 Последна публикация Sep 13, 2012, 16:43
от remotex
Free Pascal blcksock synapse
Общ форум
runtime 1 1287 Последна публикация Jul 19, 2013, 22:27
от runtime