首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Typhon上的TZQuery只返回6个字段,应该返回8个字段

Typhon上的TZQuery只返回6个字段,应该返回8个字段
EN

Stack Overflow用户
提问于 2015-05-16 09:14:19
回答 1查看 196关注 0票数 1

我正在开发Typhon (v.5.1和FPC v.2.7.1),并使用PostgreSQL 9.3作为数据库和Zeos7.2作为数据连接器创建用户登录功能。

我有以下代码:

代码语言:javascript
复制
   // 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‘字段。

代码语言:javascript
复制
ShowMessage(IntToStr(zq.FieldCount));

仅显示6个字段,但我创建的帮助器ShowDebugSQL在备忘录中显示SQL。

代码语言:javascript
复制
ShowDebugSQL(zq.SQL);

给了我预期的SQL

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

我已经测试了结果的字段列表使用循环,只有6个字段。请帮我指出我的密码出了什么问题。非常感谢。

EN

回答 1

Stack Overflow用户

发布于 2015-05-16 15:29:19

Zeos不识别UUID类型的PostgreSQL字段。UUID字段必须类型转换为字符变量(36),才能在Zeos数据集中使用。

代码语言:javascript
复制
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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30273876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档