2015-05-16 4 views
1

Я работаю над 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' не найдено.

field 'role_uid' not found

и

ShowMessage(IntToStr(zq.FieldCount)); 

отображается только 6 полей, но помощник ShowDebugSQL я сделал, чтобы показать SQL в памятке

ShowDebugSQL(zq.SQL); 

дал мне ожидать SQL

full SQL

и правильный результат, как я тестировал на pgAdmin: pgAdmin shows 8 fields

Я тестировал получившийся список полей с помощью петли и получили только 6 полей. Пожалуйста, помогите мне указать, что не так с моим кодом. Большое спасибо.

+0

Попробуйте подключить tzsqlmonitor к вашей форме, и установить его в файл журнала, проверьте содержимое в логах, если запрос действительно ставится на проволоку, или Zeos искалечил его. Являются ли поля GUID отсутствующими? Может быть, это GUID-поддержка, 2.7.1, поскольку версия FPC немного расплывчата (это скользящая версия разработки, охватывающая 3 года), может быть, она еще не там, если она старше. –

+0

Спасибо Марко, я дам попробуйте и сообщите здесь. –

+0

Пробовал использовать 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. –

ответ

0

Zeos не распознает поля PostgreSQL типа UUID. Поля 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); 
+0

Пробовали ли вы FPC/Lazarus или Delphi? Просто исключить общее ядро ​​FPC в качестве источника проблем? –

+0

Я этого не сделал, но скоро буду. В случае необходимости я отредактирую ответ. –

 Смежные вопросы

  • Нет связанных вопросов^_^