Я работаю над IDF Typhon (v.5.1 и FPC v.2.7.1) и создаю функцию входа пользователя, используя PostgreSQL 9.3 в качестве базы данных и Zeos 7.2 как соединитель данных.TZQuery на Typhon IDE возвращает только 6 полей, где он должен возвращаться 8 полей
У меня есть этот следующий код:
// ZQ: TZQuery;
zq := ExecSQL('SELECT '+
'role_name, '+
'role_enabled, '+
'uid, '+
'role_uid, '+
'user_name, '+
'enabled, '+
'full_name, '+
'user_email '+
'FROM vw_usr_users '+
'where user_name = '+QuotedStr(AUserName)+' and enabled = ''Y'' and user_password = md5('+QuotedStr(APassword)+');');
ShowDebugSQL(zq.SQL);
ShowMessage(IntToStr(zq.FieldCount));
ShowMessage(zq.FieldByName('role_uid').AsString);
if not zq.IsEmpty then
begin
if zq.FieldByName('role_uid').AsString = '' then
begin
MessageDlg('Error','User have no role...',mtError, [mbOK], 0);
end
else
begin
Self.FId:=zq.FieldByName('uid').AsString;
Self.FUserName:=AUserName;
Self.FPassword:=APassword;
Self.fEnabled:= zq.FieldByName('enabled').AsString = 'Y';
Self.fRoleID:=zq.FieldByName('role_uid').AsString;
Self.FRoleName:=zq.FieldByName('role_name').AsString;
Self.FFullName:= zq.FieldByName('full_name').AsString;
Self.FEmail:= zq.FieldByName('user_email').AsString;
Self.Log(LOG_ACTIVITY_LOGIN);
Result := True;
end;
end
//......
- ExecSQL является вспомогательной функцией, создать TZQuery экземпляр, назначать соединение и SQL, а затем открыть его.
Когда я запускаю код выше, появляется сообщение об ошибке, указывающее, что поле 'role_uid' не найдено.
и
ShowMessage(IntToStr(zq.FieldCount));
отображается только 6 полей, но помощник ShowDebugSQL я сделал, чтобы показать SQL в памятке
ShowDebugSQL(zq.SQL);
дал мне ожидать SQL
и правильный результат, как я тестировал на pgAdmin:
Я тестировал получившийся список полей с помощью петли и получили только 6 полей. Пожалуйста, помогите мне указать, что не так с моим кодом. Большое спасибо.
Попробуйте подключить tzsqlmonitor к вашей форме, и установить его в файл журнала, проверьте содержимое в логах, если запрос действительно ставится на проволоку, или Zeos искалечил его. Являются ли поля GUID отсутствующими? Может быть, это GUID-поддержка, 2.7.1, поскольку версия FPC немного расплывчата (это скользящая версия разработки, охватывающая 3 года), может быть, она еще не там, если она старше. –
Спасибо Марко, я дам попробуйте и сообщите здесь. –
Пробовал использовать TZSQLMonitor как @MarcovandeVoort, предложенный, зарегистрированный SQL был прав: '2015-05-16 22:27:59 cat: Подготовить, proto: postgresql-9, msg: Statement 1: SELECT имя роли, role_enabled, uid, role_uid, user_name, enabled, full_name, user_email FROM vw_usr_users, где user_name = 'jokorivai' и enabled = 'Y' и user_password = md5 ('jokorivai'); '. Итак, я предполагаю, что проблема будет возникать при создании столбцов данных TZQuery. –