Member 13838888 Ответов: 0

Несоответствие типов в ошибке выражения в delphi 2010


В Delphi 2010 при выполнении приведенного ниже запроса отображается ошибка "несоответствие типов в выражении". Но когда я запускаю тот же запрос в Interbase, запрос выполняется и отображает записи.

Почему он не выполняется из программного обеспечения??

Что я уже пробовал:

Запрос:
select distinct 'D' x,76 Dlid, Seqno, DLYear, LTime, SigNo , DSigStatus , DDLCS, DRIGS from DIGDATA76  where DRIGS <> -1 and ((( DLYEAR = 2018) And ( LTime > 756141126) or (DLYEAR > 2018)) and ((DLYEAR = 2018 ) And
( LTime <= 761732473) or ( DLYEAR < 2018))) Union All select distinct 'A' x,76 Dlid, Seqno, DLYear, LTime, ASigNo, ASigno AVoltage, LTime DDLCS, LTime DRIGS from ANGDATA76  where ((( DLYEAR = 2018) And ( LTime > 756141126)
 or (DLYEAR > 2018)) and ((DLYEAR = 2018 ) And ( LTime <= 761732473) or ( DLYEAR < 2018))) Union All select distinct 'M' x,76 Dlid, Seqno, DLYear, LTime, MByte89, MByteAB a, LTime DDLCS, LTIME DRIGS from MDATA76
  where  ((( DLYEAR = 2018) And ( LTime > 756141126) or (DLYEAR > 2018)) and ((DLYEAR = 2018 ) And ( LTime <= 761732473) or ( DLYEAR < 2018))) order by 4, 5, 3

0x01AA

Как получить доступ к базе данных из вашего кода?
а) БДЕ
б) FireDAC
гр.) требует
г) АДО?
другие?

Member 13838888

BDE

0x01AA

Вы уверены, что bde настроен на SQLQRYMODE=SERVERсоответственно настройте его явно и повторите попытку.

Member 13838888

Может ли u plz сказать мне, как установить SQLQRYMODE = SERVER??

0x01AA

Я уверен, что вы теперь собственность Params от TDatabase Вы можете просто добавить SQLQRYMODE = SERVER там.

Member 13838888

Теперь он показывает новую ошибку.

Неизвестная база данных.
Ваше имя пользователя и пароль не определены. Попросите администратора базы данных настроить логин InterBase.
Псевдоним: 180519002

Примечание : тот же запрос выполняется в Interbase.

0x01AA

Я предполагаю, что вы удалили значения USER NAME=xyz и PASSWORD=xyz.
Вы должны добавить строку SQLQRYMODE=SERVER, а не заменять все параметры этой строкой

Member 13838888

RHBkDataBase[SelDBCtr] := TDataBase.Create(RHBkDataBase[SelDBCtr]);
С Помощью RHBkDataBase[SelDBCtr] Сделайте
Начать
Имя Базы Данных := SelDblist.Строки [SelDBCtr];
С Aliasname := SelDblist.Строки [SelDBCtr];
С Парами Делать
Начать
Добавить('имя пользователя=SYSDBA');
Добавить('PASSWORD=masterkey');
Добавить('SQLQRYMODE=SERVER');
Конец;
LoginPrompt := False;
Подключено := True;
Примечание : ранее имя базы данных не присваивалось TQuery. После того, как я назначил имя базы данных RHBkDataBase, то неизвестная ошибка базы данных отображается.

0x01AA

Вы не указываете файл базы данных, что-то вроде этого: Add('SERVER NAME=c:\temp\MyDB.IB');

Member 13838888

с помощью TableList[SelDBCtr] do
начать
cUserName := 'имя пользователя=SYSDBA';
cPassWord := 'пароль=мастер-ключ';
Добавить( 'имя сервера='+ConnectDB );
Добавить( cUserName );
Добавить( пароль );
конец;
Сессия.Аддалиас(SelDblist.Строки [SelDBCtr], 'INTRBASE', TableList[SelDBCtr]);
RHBkDataBase[SelDBCtr] := TDataBase.Create(RHBkDataBase[SelDBCtr]);
С Помощью RHBkDataBase[SelDBCtr] Сделайте
Начать
Имя Базы Данных := SelDblist.Строки [SelDBCtr];
С Aliasname := SelDblist.Строки [SelDBCtr];
С Парами Делать
Начать
Добавить( 'имя сервера='+ConnectDB );
Добавить('имя пользователя=SYSDBA');
Добавить('PASSWORD=masterkey');
Добавить('SQLQRYMODE=SERVER');
Конец;
LoginPrompt := False;
Подключено := True;
CreateAndConnectBakUpDb := True;

Примечание : все та же ошибка отображения.

0x01AA

Как вы подключались к БД до сих пор. Для меня не логично, что у вас сейчас так много проблем. Кстати. теперь похоже что Вы путаете псевдоним и не псевдоним

0x01AA

В вашем случае я бы сделал небольшое тестовое приложение.
Проверьте свой запрос с помощью компонентов Interbase TIBDatabase и TIBQuery. В случае, если у вас снова возникнет та же проблема, вы, по крайней мере, знаете, что это не BDE. В противном случае вам нужно выяснить, почему BDE создает эту проблему.

Patrice T

Это похоже на SQL

0 Ответов