Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с полем "Num" в БД "Paradox". 
:(
    Опции темы
Vladimir_K
Дата 30.12.2006, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 2.12.2006

Репутация: нет
Всего: 1



Создал базу данных Paradox (BDE), есть поле Num (Autoincrement), как сделать так, чтобы это поле отображало реальный номер записей в таблице (начиная с "1")? Сейчас у меня первая запись под номером 14529, и при добавлении/удалении записей эти номера изменяются, есть и пробелы, например, после 15234 сразу следует номер 16345 и т.д. Можно ли избавиться от таких пробелов в нумерации?

Смотрел здесь: http://forum.vingrad.ru/topic-31038.html#go_p, заинтересовал примерчик, но у меня возникают ошибки при компилляции начиная с того, что при включении DBE выдает - нет такого модуля. Объясните, пожалуйста, как исправить данный пример? И поможет ли он?
Код

в секцию uses включи DBE


Procedure TfmMain.PackTable(tLog:TTable);
var
 TblDesc: CRTblDesc;
//  rslt: DBIResult;
 Dir: string; //имеется в виду huge string т.е. {$H+}
 hDb: hDbiDb;
begin
 if tLog.Active then tLog.Active := False; //деактивиpуем TTable
 if not tLog.Exclusive then tLog.Exclusive:=True; 
 SetLength(Dir, dbiMaxNameLen + 1);
 DbiGetDirectory(tLog.DBHandle, False, PChar(Dir));
 SetLength(Dir, StrLen(PChar(Dir)));
 DbiOpenDatabase(nil, nil, dbiReadWrite, dbiOpenExcl, nil, 0, nil, nil, hDb);
 DbiSetDirectory(hDb, PChar(Dir));
 FillChar(TblDesc, sizeof(CRTblDesc), 0);
 StrPCopy(TblDesc.szTblName, vDBPath+tLog.TableName);
 StrCopy(TblDesc.szTblType, szParadox);//BTW тут может и szDBase стоять
 TblDesc.bPack := TRUE;
 DbiDoRestructure(hDb, 1, @TblDesc, nil, nil, nil, False);
 DbiCloseDatabase(hDb);
end;

--------------------
Судя по всему, у меня огромное количество мозгов - мне требуется уйма времени, чтобы ими пораскинуть
PM MAIL ICQ   Вверх
dimazu
Дата 30.12.2006, 21:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 4.3.2006

Репутация: 1
Всего: 5



Код

uses DB, DBTables,
  DbiTypes, DbiProcs, DbiErrs, DBConsts;


Но паковать берет время....
PM MAIL   Вверх
Vladimir_K
Дата 30.12.2006, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 2.12.2006

Репутация: нет
Всего: 1



Сделал так:

procedure PackTable(tLog:TTable); (убрал TfmMain);

теперь осталась одна ошибка в строке:  StrPCopy(TblDesc.szTblName, vDBPath+tLog.TableName);
[Error] U_SUBD.pas(134): Undeclared identifier: 'vDBPath'

Как исправить?
--------------------
Судя по всему, у меня огромное количество мозгов - мне требуется уйма времени, чтобы ими пораскинуть
PM MAIL ICQ   Вверх
dimazu
Дата 31.12.2006, 07:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 4.3.2006

Репутация: 1
Всего: 5



Написать:
Код


vDBPath:=tLog.DataBaseName;


PM MAIL   Вверх
Vladimir_K
Дата 31.12.2006, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 2.12.2006

Репутация: нет
Всего: 1



Цитата(dimazu @  31.12.2006,  07:00 Найти цитируемый пост)
Написать:

код Pascal/Delphi
1:

vDBPath:=tLog.DataBaseName;


А куда вставить эту строку? В вышеприведенную процедуру? Вставлял, выдает ту же ошибку: Undeclared identifier: 'vDBPath'
--------------------
Судя по всему, у меня огромное количество мозгов - мне требуется уйма времени, чтобы ими пораскинуть
PM MAIL ICQ   Вверх
dimazu
Дата 31.12.2006, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 4.3.2006

Репутация: 1
Всего: 5



Common, man...  smile 
Код

var vDBPath : string;
begin  
 vDBPath:=tLog.DataBaseName;
 if vDBPath[length(vDBPath)]<>'\' then vDBPath:=vDBPath+'\';
 ....

Но по-моему, паковать лучше так:
Код

procedure PackTable(Table: TTable);
var
  Props: CURProps;
  hDb: hDBIDb;
  TableDesc: CRTblDesc;

begin
  // Make sure the table is open exclusively so we can get the db handle...
  if Table.Active = False then
    raise EDatabaseError.Create('Table must be opened to pack');
  if Table.Exclusive = False then
    raise EDatabaseError.Create('Table must be opened exclusively to pack');

  // Get the table properties to determine table type...
  Check(DbiGetCursorProps(Table.Handle, Props));

  // If the table is a Paradox table, you must call DbiDoRestructure...
  if Props.szTableType = szPARADOX then
  begin
    // Blank out the structure...
    FillChar(TableDesc, sizeof(TableDesc), 0);
    //  Get the database handle from the table's cursor handle...
    Check(DbiGetObjFromObj(hDBIObj(Table.Handle), objDATABASE, hDBIObj(hDb)));
    // Put the table name in the table descriptor...
    StrPCopy(TableDesc.szTblName, Table.TableName);
    // Put the table type in the table descriptor...
    StrPCopy(TableDesc.szTblType, Props.szTableType);
    // Set the Pack option in the table descriptor to TRUE...
    TableDesc.bPack := True;
    // Close the table so the restructure can complete...
    Table.Close;
    // Call DbiDoRestructure...
    Check(DbiDoRestructure(hDb, 1, @TableDesc, nil, nil, nil, FALSE));
  end
  else
    // If the table is a dBASE table, simply call DbiPackTable...
    if Props.szTableType = szDBASE then
      Check(DbiPackTable(Table.DBHandle, Table.Handle, nil, szDBASE, TRUE))
    else
      // Pack only works on PAradox or dBASE; nothing else...
      raise EDatabaseError.Create('Table must be either of Paradox or dBASE ' +
               'type to pack');

  Table.Open;
end;



Это сообщение отредактировал(а) dimazu - 31.12.2006, 16:57
PM MAIL   Вверх
Vladimir_K
Дата 31.12.2006, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 2.12.2006

Репутация: нет
Всего: 1



Спасибо за помощь. Буду пробовать.

С Новым Годом!!! smile 
--------------------
Судя по всему, у меня огромное количество мозгов - мне требуется уйма времени, чтобы ими пораскинуть
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0527 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.