Несоответствие типов в ошибке выражения в 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