Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.11.2009, 21:04   #1
Zibiv
Пользователь
 
Регистрация: 27.09.2008
Сообщений: 64
Плохо Ошибка в БД:Invalid use of keyword (Delphi)

Добрый вечер господа, у меня такая проблема, недавно начал заниматься Бд и у меня возник вопрос. Выдается ошибка при сортировки таблицы. Используется DBGridEh, Query, DataSource(Библеотека EhLib)в гриде осуществляю сортировку по клику на заголовке при помощи подключения библиотечного файла EhLibBDE.pas. Текст ошибки следующий "Invalid use of keyword. Token: By Line Number: 2.". Сортирует все столбцы, кроме двух, при клике на их заголовоках, выдает вышеприведенную ошибку. Причем эти два столбца отличаются от остальных тем, что Созданы Не в DataBaseDesktop, а с помощью редактора полей(создание полей соответствия) в Delphi в Query->Fieldseditor->NewField. Эти два поля имитируют реальные поля, выполняя подстановку значений из других таблиц, соответствующих имеющимся ключевым событиям.
Какие есть способы исправления этой ошибки...заранее благодарен...

Последний раз редактировалось Zibiv; 26.11.2009 в 21:20.
Zibiv вне форума Ответить с цитированием
Старый 27.11.2009, 11:58   #2
ОДИНОЧЕСТВО В СЕТИ
Любопытная Вредина
Участник клуба
 
Аватар для ОДИНОЧЕСТВО В СЕТИ
 
Регистрация: 19.06.2009
Сообщений: 1,285
По умолчанию

имена полей и таблиц можно посмотреть?
и то место в коде которое выбивает ошибку?
Дурь - это особая форма материи, которая не возникает ниоткуда и не исчезает никуда, а лишь переходит из одной головы в другую.
ОДИНОЧЕСТВО В СЕТИ вне форума Ответить с цитированием
Старый 28.11.2009, 10:31   #3
Zibiv
Пользователь
 
Регистрация: 27.09.2008
Сообщений: 64
По умолчанию

Три таблицы с названиями Kafs, Dolhnosts, Kadrs. Соответственно, в первой таблице хранится информация о кафедрах( состоит из двух полей Id, KafName), вторая информация о должностях(так же два поля Id, DolhnostNAme) и третья таблица в которой хранится инфо о университетских кадрах (поля Id,NAme,Pol,KafId,DolhnostID,Razrd(разряд служащего),Stav(Ставка),DataN,DataY(дата приема на работу, дата увольнения),Tel и два поля которые не сортирует это KAfNAme, Dolhnosts NAme).
Насчет места в коде которое выдает ошибку я не знаю, наверное это связанно с самой сортировкой, правильно? тогда вот код файла
Код:
EhLibBDE.pas

unit EhLibBDE;

{$I EhLib.Inc}

interface

uses
{$IFDEF EH_LIB_6} Variants, {$ENDIF}
  DbUtilsEh, DBGridEh, DBTables, Db, BDE, SysUtils;

implementation

uses Classes;

type
  TBDEDataSetCrack = class(TBDEDataSet);

function BDEDataSetDriverName(DataSet: TBDEDataSet): String;
var
  hCur: hDBICur;
  rslt: DBIResult;
{$IFDEF CIL}
{$ELSE}
  Descs: STMTBaseDesc;
{$ENDIF}
  dbDes: DBDesc;
begin
  hCur := nil;
  try
    // Look at DbiQGetBaseDescs in the BDE32.HLP for more information...
{$IFDEF CIL}
    if DataSet is TQuery then
      Check(DbiQGetBaseDescs(TQuery(DataSet).STMTHandle, hCur))
    else
    begin
      Result := '';
      Exit;
    end;
{ TODO : How to get DriverName under Delphi8??? }
    Exit;
//    rslt := DbiGetNextRecord(hCur, dbiNOLOCK, Descs, nil);
//    Check(DbiGetDatabaseDesc(Descs.szDatabase, dbDes));
{$ELSE}
    Check(DbiQGetBaseDescs(TBDEDataSetCrack(DataSet).STMTHandle, hCur));
    rslt := DbiGetNextRecord(hCur, dbiNOLOCK, @Descs, nil);
    Check(DbiGetDatabaseDesc(Descs.szDatabase, @dbDes));
{$ENDIF}
     if (rslt = DBIERR_NONE) then
       // Look at STMTBaseDescs in the BDE32.HLP for more information...
       Result := String(dbDes.szDbType);
  finally
    if (hCur <> nil) then
      check(DbiCloseCursor(hCur));
  end;
end;

function DateValueToBDESQLStringProc(DataSet: TDataSet; Value: Variant): String;
begin
  Result := DateValueToDataBaseSQLString(BDEDataSetDriverName(TBDEDataSet(DataSet)), Value)
end;

type
  TBDEDatasetFeaturesEh = class(TSQLDatasetFeaturesEh)
  public
    procedure ApplyFilter(Sender: TObject; DataSet: TDataSet; IsReopen: Boolean); override;
  end;

{ TBDEDatasetFeaturesEh }

procedure TBDEDatasetFeaturesEh.ApplyFilter(Sender: TObject; DataSet: TDataSet; IsReopen: Boolean);
begin
  if TDBGridEh(Sender).STFilter.Local then
  begin
    TDBGridEh(Sender).DataSource.DataSet.Filter :=
      GetExpressionAsFilterString(TDBGridEh(Sender),
        GetOneExpressionAsLocalFilterString, nil);
    TDBGridEh(Sender).DataSource.DataSet.Filtered := True;
  end else
    ApplyFilterSQLBasedDataSet(TDBGridEh(Sender), DateValueToBDESQLStringProc, IsReopen, 'SQL');
end;

initialization
  RegisterDatasetFeaturesEh(TBDEDatasetFeaturesEh, TQuery);
  RegisterDatasetFeaturesEh(TBDEDatasetFeaturesEh, TTable);
end.
Zibiv вне форума Ответить с цитированием
Старый 28.11.2009, 10:41   #4
ОДИНОЧЕСТВО В СЕТИ
Любопытная Вредина
Участник клуба
 
Аватар для ОДИНОЧЕСТВО В СЕТИ
 
Регистрация: 19.06.2009
Сообщений: 1,285
По умолчанию

Цитата:
NAme
- ключевое слово переименуйте поле хотя бы в Name1
не называйте поля ключевыми словами и будет вам счастье
Дурь - это особая форма материи, которая не возникает ниоткуда и не исчезает никуда, а лишь переходит из одной головы в другую.
ОДИНОЧЕСТВО В СЕТИ вне форума Ответить с цитированием
Старый 28.11.2009, 15:09   #5
Zibiv
Пользователь
 
Регистрация: 27.09.2008
Сообщений: 64
По умолчанию

извиняюсь, я неправильно написал название поля вам
Цитата:
(поля Id,FMIO(фамилия имя отчество),Pol,KafId,DolhnostID,Razr d(разряд служащего)
Zibiv вне форума Ответить с цитированием
Старый 29.11.2009, 10:57   #6
CrossDeLena
 
Регистрация: 12.09.2008
Сообщений: 7
По умолчанию

Ооо у меня тоже типа такой фигни, все поля названные нормально, но при сортировке выдает ошибку=((
CrossDeLena вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Invalid Filename LobsterOK Общие вопросы Delphi 7 27.04.2010 16:56
Invalid Pointer Operation csander Общие вопросы Delphi 0 21.10.2009 17:44
Invalid Pointer Operation Unconnected Общие вопросы Delphi 3 21.02.2009 20:23
Invalid pointer operation Димарик Общие вопросы Delphi 2 05.11.2007 09:53
Delphi + dll= Invalid Pointer Operator LEKA Общие вопросы Delphi 4 01.05.2007 23:38