Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql Typhon IDE上的TZQuery只返回6个字段,其中应返回8个字段_Postgresql_Lazarus_Fpc_Zeos - Fatal编程技术网

Postgresql Typhon IDE上的TZQuery只返回6个字段,其中应返回8个字段

Postgresql Typhon IDE上的TZQuery只返回6个字段,其中应返回8个字段,postgresql,lazarus,fpc,zeos,Postgresql,Lazarus,Fpc,Zeos,我正在开发Typhon IDE v.5.1和FPC v.2.7.1,并正在创建用户登录功能,使用PostgreSQL 9.3作为数据库,Zeos 7.2作为数据连接器 我有以下代码: // ZQ: TZQuery; zq := ExecSQL('SELECT '+ 'role_name, '+ 'role_enabled, '+ 'uid, '+ 'role_uid, '+ '

我正在开发Typhon IDE v.5.1和FPC v.2.7.1,并正在创建用户登录功能,使用PostgreSQL 9.3作为数据库,Zeos 7.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
  //......
ExecSQL是一个帮助函数,创建TZQuery实例,分配连接和SQL,然后打开它。 当我运行上述代码时,会收到一条错误消息,指出未找到“role\u uid”字段

ShowMessage(IntToStr(zq.FieldCount));
只显示了6个字段,但帮助器ShowDebugSQL是我用来在备忘录中显示SQL的

ShowDebugSQL(zq.SQL);
给了我期望的SQL

我在pgAdmin上测试的结果是正确的:


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

Zeos无法识别UUID类型的PostgreSQL字段。 UUID字段必须类型转换为字符varying36,以便在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);

尝试将tzsqlmonitor连接到表单,并将其设置为log to file,检查日志文件的内容(如果查询真的挂线了,或者zeos弄坏了它)。这两个GUID字段都丢失了吗?可能是GUID支持,2.7.1,因为FPC版本有点模糊,它是一个跨越3年的滚动开发版本,可能还没有,如果它是一个旧的OneHanks Marco,我会尝试一下,并在这里报告。尝试使用@Marcovandevort建议的TZSQLMonitor,记录的SQL是正确的:2015-05-16 22:27:59 cat:Prepare,proto:postgresql-9,msg:Statement 1:选择来自vw_usr_用户的角色名称、角色启用、uid、角色uid、用户名、启用、全名、用户电子邮件,其中用户名='jokorivai',启用='Y',用户密码=md5'jokorivai';。因此,我假设问题会在TZQuery数据集列建立时发生。经过一些检查后,出现了一个想法:Zeos 7.2的TZQuery——显然还有其他Zeos数据集——不支持UUID类型的PostgreSQL字段。它也可能是Zeos继承的基本FPC数据库类。这就是我为什么要讨论2.7.1:-你用FPC/Lazarus或Delphi进行测试了吗?只是为了排除FPC的通用db核心作为问题源?我没有,但很快我会的。如有必要,我将编辑我的答案。