Ordem diferente Firebird/DBExpress

Firebird

10/02/2005

Amigos, bom dia.
Tenho uma tabela, na qual utilizo o IB Expert para dar manutencao/ visualizar os registros.

nesta tabela, executo um ORDER BY.
Os registros sao mostrados perfeitamente na ordem desejada.

Porem, via delphi,
utilizando os componentes DBX para conexao, vejo que a ordem nao bate.
utilizo midas.dll, dbexpint.dll
datas: midas.dll 23/04/2004, dbexpint.dll 27/02/2004.

Conexao:

if TipoBaseDados = ´FIREBIRD´ then
begin
Params.Add(´DriverName=INTERBASE´);
Params.Add(´Database=´ + Trim(dm.AdoTabelaPATH.AsString)+´\´+Trim(dm.AdoTabelaNOMEARQUIVO.AsString));
Params.Add(´User_Name=´ + Crip(Trim(dm.AdoTabelaUSERNAME.AsString), Chave, ´D´));
Params.Add(´Password=´ + Crip(Trim(dm.AdoTabelaPASSWORD.AsString), Chave, ´D´));
Params.Add(´RoleName=Rolename´);
Params.Add(´SQLDialect=3´);
Params.Add(´BlobSize=-1´);
Params.Add(´WaitOnLocks=True´);
Params.Add(´Trim Char=False´);
Params.Add(´ErrorResourceFile=´);
Params.Add(´LocaleCode=0000´);
Params.Add(´CommitRetain=FALSE´);
Params.Add(´INTERBASE TransIsolation=ReadCommited´);
Params.Add(´OS Authentication=False´);
GetDriverFunc := ´getSQLDriverINTERBASE´;
LibraryName := ´dbexpint.dll´;
VendorLib := ´gds32.dll´;
end;


Exemplo
Pelo IB Expert.
Registros
-LINHA1
-LINHA5
LINHA3
LINHA4
-MA1
-MA5
MA2
MA3
MA4

Pelo Delphi
-LINHA1
LINHA3
LINHA4
-LINHA5
-MA1
MA2
MA3
MA4
-MA5

Nao sei o que pode ser.

PS: utilizo fb 1.5, delphi7 com upgrade atualizado.

Obrigado a todos.


Pedih

Pedih

Curtidas 0

Respostas

Afarias

Afarias

10/02/2005

o q define a ordem dos registros em um order by (para dados TEXTO) é o character set e collate utilizados.

Veja qual o char set que está usando na conexão.

Outra coisa é ter cuidado com as tabelas de memória como ClientDataSets, esses componentes podem ordenar os dados da forma q quizerem pois o fazem em memória não dependendo da ordem que os dados foram ´extraídos´ do banco de dados


T+


GOSTEI 0
Pedih

Pedih

10/02/2005

o q define a ordem dos registros em um order by (para dados TEXTO) é o character set e collate utilizados. Veja qual o char set que está usando na conexão. Outra coisa é ter cuidado com as tabelas de memória como ClientDataSets, esses componentes podem ordenar os dados da forma q quizerem pois o fazem em memória não dependendo da ordem que os dados foram ´extraídos´ do banco de dados T+


Afarias, bom dia.
quanto ao seu comentario, ok.

mas como eu defino o charset na conexao >???

no IB, vi que o charset que ele utilizou é :ANSI_CHARSET, mas no delphi, na conexao, como eu defino isso ?

Obrigado pela atencao.


GOSTEI 0
Afarias

Afarias

10/02/2005

É bom um colega com conhecimento em DBX responder. Acredito q seja atraves do Params do SQLConnection, mas não sei ao certo.


T+


GOSTEI 0
Moonlight

Moonlight

10/02/2005

Ë no SQLConnection sim... No Connection Settings do driver você tem lá ´ServerCharset´, que é onde vc entra com o charset.


GOSTEI 0
Pedih

Pedih

10/02/2005

Ë no SQLConnection sim... No Connection Settings do driver você tem lá ´ServerCharset´, que é onde vc entra com o charset.


Veja:
já coloquei na configuracao:
if TipoBaseDados = ´FIREBIRD´ then
begin
Params.Add(´DriverName=INTERBASE´);
Params.Add(´Database=´ + Trim(dm.AdoTabelaPATH.AsString)+´\´+Trim(dm.AdoTabelaNOMEARQUIVO.AsString));
Params.Add(´User_Name=´ + Crip(Trim(dm.AdoTabelaUSERNAME.AsString), Chave, ´D´));
Params.Add(´Password=´ + Crip(Trim(dm.AdoTabelaPASSWORD.AsString), Chave, ´D´));
Params.Add(´RoleName=Rolename´);
Params.Add(´SQLDialect=3´);
Params.Add(´BlobSize=-1´);
Params.Add(´WaitOnLocks=True´);
Params.Add(´Trim Char=False´);
Params.Add(´ErrorResourceFile=´);
Params.Add(´LocaleCode=0000´);
Params.Add(´ServerCharset=WIN1252´);
Params.Add(´CommitRetain=FALSE´);
Params.Add(´INTERBASE TransIsolation=ReadCommited´);
Params.Add(´OS Authentication=False´);
GetDriverFunc := ´getSQLDriverINTERBASE´;
LibraryName := ´dbexpint.dll´;
VendorLib := ´gds32.dll´;
end;

POREM, ficou do mesmo jeito..

qual o charset entao que devo utilizar ???

Obrigado.


GOSTEI 0
Afarias

Afarias

10/02/2005

Depende! Qual o charset do banco? Como é a ordenaçào desejada?

Vc tinha falado em ANSI, mas agora parece q optou por WIN1252... bom, dê uma lida neste artigo q pode ser de ajuda:

http://www.firebase.com.br/cgi-bin/firebase.cgi/dica?ID=1


T+


GOSTEI 0
Pedih

Pedih

10/02/2005

Depende! Qual o charset do banco? Como é a ordenaçào desejada? Vc tinha falado em ANSI, mas agora parece q optou por WIN1252... bom, dê uma lida neste artigo q pode ser de ajuda: http://www.firebase.com.br/cgi-bin/firebase.cgi/dica?ID=1 T+


Ainda nao resolvi. Apesar de ter lido o artigo.
Veja:

Pelo IB;

-A
-B
A
ALTERNADOR
etc...

PELO DELPHI
A
-A
ALTERNADOR
-B

cricao das tabelas.:
CREATE TABLE GRUPO (
GRCODIGO DESCR20 /* DESCR20 = VARCHAR(20) */,
GRNOME DESCR50 /* DESCR50 = VARCHAR(50) */,

domain DESCRI30
CREATE DOMAIN DESCR30 AS
VARCHAR(30) CHARACTER SET NONE
COLLATE NONE

domain DESCRI50
CREATE DOMAIN DESCR50 AS
VARCHAR(50) CHARACTER SET NONE
COLLATE NONE

importante: apesar de nao ter definido qualquer charset, O IB eXPERT
MOstra os registros perfeitamente.

somente o delphi ta mostrando com diferencas

o que fazer?

obrigado :idea:


GOSTEI 0
POSTAR