我在delphi里用的Ado连接sybase.Ado连接sybase,实际上用的是ODBC数据源。
 vg_sConnectString := 'Provider=MSDASQL.1;Persist Security Info=True;' +
    'User ID=' + sUser + ';Password=' + sPwd + ';Data Provider=MSDASQL;Data Source=' + sDataSource;现在的问题是按字符串,也就是姓名查询时,有时能检索出结果,有时检索不出结果。不知道为什么,
我觉得可能是字符集的问题,但我又不知道字符集在哪里设置。我在odbc里的字符集设置iso_1不起作用。

解决方案 »

  1.   

    只要能连接上应该与字符集没有关系。应该是你的姓名字段中空格的问题!
    建议
     select  * from 表  where 姓名 like '张三%'
      

  2.   

      Result := False;
      sSql1 :=
        'select r.reader_barcode,r.reader_name,r.ident_id,r.reader_gender,' +
        'w.workplace_desc,t.readertype_desc,c.code_7' +
        ' from manager.readers r ' +
        ' join manager.reader_workplaces w on w.library_id = r.library_id and w.workplace_id = r.workplace_id' +
        ' join manager.reader_types t on t.library_id = t.library_id and t.readertype_id = r.readertype_id' +
        ' join manager.code_table c on c.code_type = ''50000'' and r.card_status = c.code_6' +
        ' and r.reader_name = ' + QuotedStr(Trim(A_sName));
      SysDM.qryReaderList.Close;
      SysDM.qryReaderList.SQL.Text := sSql1;
      try
        SysDM.qryReaderList.Open;
        A_iFlag := SysDM.qryReaderList.RecordCount;
        Result := True;
      except
        on E:Exception do
        begin
          ShowMsg(E.Message);
        end;
      end;
      

  3.   

    可以断定,与字符集没有关系!还是SQL语句代码的问题,你的这个语句好长啊,而且连接了好几个表,再看一下你的数据吧!
      

  4.   

    后台sql advantage里相同的语句没问题。我测试过了。
      

  5.   

      sSql1 := 'select * from manager.readers where reader_name = ' + QuotedStr(Trim(A_sName));我改成这样也查不出结果
      

  6.   

    sybase的字符是不是不太一样啊。
      

  7.   

    QuotedStr这个就是加引号的函数
      

  8.   

    改成这样试试:
    sSql1 := 'select * from manager.readers where reader_name like ' + QuotedStr('%'+Trim(A_sName)+'%');
      

  9.   

    sybase的字符集,在服务器配置中设置.
      

  10.   

    建议你将这个SQL语句在数据库中执行一下试试
      

  11.   

    我后台执行了,也有结果。就是在delphi里执行不出来
      

  12.   

    我用过SYBASE数据库,没有出现这样的问题,我觉得你的问题应该只是浅层的问题,你再仔细检查一下吧。