我正在开发Typhon (v.5.1和FPC v.2.7.1),并使用PostgreSQL 9.3作为数据库和Zeos7.2作为数据连接器创建用户登录功能。
我有以下代码:
// 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
//......当我运行上面的代码时,我会收到错误消息,说明没有找到'role_uid‘字段。

和
ShowMessage(IntToStr(zq.FieldCount));仅显示6个字段,但我创建的帮助器ShowDebugSQL在备忘录中显示SQL。
ShowDebugSQL(zq.SQL);给了我预期的SQL

并在pgAdmin上测试了正确的结果:

我已经测试了结果的字段列表使用循环,只有6个字段。请帮我指出我的密码出了什么问题。非常感谢。
发布于 2015-05-16 15:29:19
Zeos不识别UUID类型的PostgreSQL字段。UUID字段必须类型转换为字符变量(36),才能在Zeos数据集中使用。
zq := Query('SELECT '+
'role_name, '+
'role_enabled, '+
//---------------------------
'uid::varchar(36) as uid, '+
'role_uid::varchar(36) as 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)+');', False);https://stackoverflow.com/questions/30273876
复制相似问题