Вопросы программирования баз данных на Borland Delphi

После работы программы не сохраняются изменения в базе Paradox. Что делать?

Как мне упаковать Paradox или DBF таблицу?

Почему при добавлении/изменении записей в некоторых запросах возникает ошибка Cannot modify a read-only dataset?

Database Desktop показывает содержимое таблиц шрифтом без русских букв. Что делать?

Hе получается вставить в таблицу записи со строками на русском языке -- некоторые буквы меняются на другие -- что делать?

Я переписал готовую программу на машину заказчика, а она там не запускается -- говорит "Error initializing database engine". Что делать?

Помню еще один хороший частый вопрос про коннект к Personal Oracle, но не помню ответа на него... Hапомните?

Hе получается открыть таблицу, созданную в InterBase с DEFAULT CHARACTER SET WIN1251. Оно говорит, что "WIN1251 undefined".

У меня в программе происходит очень большой запрос -- в районе нескольких тысяч или десятков тысяч записей. Соответственно большой сетевой трафик, программа тормозит и так далее. Можно ли как-нибудь оптимизировать это все?

Как создать таблицу базы данных, не используя Database Desktop?

Подскажите хорошую литературу по базам данных.



Вопрос:
После работы программы не сохраняются изменения в базе Paradox. Что делать?

Ответ:

Где-нибудь при закрытии главной формы выполните нижеследующие куски кода:

Для Delphi 3: 
  Table.FlushBuffers при открытой таблице.

Для прочих: 
  Table.Open; 
  Check(dbiSaveChanges(Table.Handle)); 
  Table.Close;

Чтобы сбросить кэш, можно еще в после этого сделать
asm
  mov  ah, $0D
  int  $21
end;

Вопрос:
Как мне упаковать Paradox или DBF таблицу?

Ответ:

Самый простой метод -- воспользоваться функцией PackTable из rxLib. В версии 2.32 и, наверное, раньше, есть ошибка в процедуре PackTable: измените кусок:

with tblDesc do begin
  { ... }
  bPack := true; { добавьте эту строчку для исправления ошибки и }
                 { перекомпилируйте библиотеку }
end;

(JB): Для перегенерации индексов:
  Table1.Exclusive := True;
  Table1.Open;
  Check(dbiRegenIndexes(Table1.Handle);

Вопрос:
Почему при добавлении/изменении записей в некоторых запросах возникает ошибка Cannot modify a read-only dataset?

Ответ:

Во-первых, должно быть RequestLive := True; во-вторых, чтобы запрос был редактируемым, он должен удовлетворять требованиям, изложенным в хелпе при поиске по "live result sets"

Наверх к содержанию


Вопрос:
Database Desktop показывает содержимое таблиц шрифтом без русских букв. Что делать?

Ответ:

Для DBD 5.0 в файл c:\windows\pdoxwin.ini вставить в секцию

[Properties]
SystemFont=Arial Cyr
  • Если файла не существует, то его надо создать, если секции не существует, то ее надо создать.
    Для DBD 7.0 нужно испpавить pеестp: ключ
    HKCU\Software\Borland\DBD\7.0\Preferences\Properties\SystemFont="Arial Cyr"

    Наверх к содержанию

Вопрос:
Hе получается вставить в таблицу записи со строками на русском языке -- некоторые буквы меняются на другие -- что делать?

Ответ:

В Database Desktop поставьте правильный Language Driver у таблицы, например, Pdox ANSI Cyrr.

Наверх к содержанию


Вопрос:

Я переписал готовую программу на машину заказчика, а она там не запускается -- говорит "Error initializing database engine". Что делать?

Ответ:
Прочитать X:\DELPHI\DOC\deploy.txt.

Наверх к содержанию


Вопрос:
Помню еще один хороший частый вопрос про коннект к Personal Oracle, но не помню ответа на него... Hапомните?

Ответ:

user/password@2:
Это так для Oracle SQL Plus, и более других его утилит. А в BDE надо оставить все как для коннекта к сетевому серверу, (протокол TNS, имя юзера, кодировку, интерфейсную DLL) только вместо имени сервера написать "2:". Сие годится и для случая когда на одной машине и сетевой сервер и приложение.

Наверх к содержанию


Вопрос:
Hе получается открыть таблицу, созданную в InterBase с DEFAULT CHARACTER SET WIN1251. Оно говорит, что "WIN1251 undefined".

Ответ:

Ставьте Interbase в каталог с путем, соответствующим DOS-овским соглашениям (8:3).

Наверх к содержанию


Вопрос:
У меня в программе происходит очень большой запрос -- в районе нескольких тысяч или десятков тысяч записей. Соответственно большой сетевой трафик, программа тормозит и так далее. Можно ли как-нибудь оптимизировать это все?

Ответ:

Постарайтесь изменить логику приложения так, чтобы таких запросов не возникало. Обычно подобные вещи свидетельствуют о несколько неверной архитектуре приложения.

Наверх к содержанию


Вопрос:
Как создать таблицу базы данных, не используя Database Desktop?

Ответ:
Положите компонент TTable на форму и попробуйте указанную ниже процедуру.
procedure TForm1.CreateMyTable(NameFile: string);
begin
  with Table1 do
  begin
    Active := False;
    DatabaseName := '';
    TableName := NameFile;
    TableType := ttDefault;
    with FieldDefs do
    begin
      Clear;
      Add('EmpNo', ftInteger, 0, False);
      Add('LastName', ftString, 20, False);
      Add('FirstName', ftString, 15, False);
      Add('PhoneExt', ftString, 4, False);
      Add('HireDate', ftDateTime, 0, False);
      Add('Salary', ftFloat, 0, False);
    end;
    with IndexDefs do
    begin
      Clear;
      Add('', 'EmpNo', [ixPrimary, ixUnique]);
      Add('ByName', 'LastName;FirstName', [ixCaseInsensitive]);
    end;
    CreateTable;
  Free;
  end;
end;

Вопрос:
Подскажите хорошую литературу по базам данных.

Ответ:
1. Мартин Грубер "Понимание SQL" (highly recommended)
2. Мартин Грубер "SQL: справочное руководство" (recommended)

Наверх к содержанию

 

Delphi32 Delphi32 - Всё о Дельфи. WWW.delphi32.narod.ru
Сайт управляется системой uCoz