Ordem diferente Firebird/DBExpress
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.
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
Curtidas 0
Respostas
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+
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
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
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+
T+
GOSTEI 0
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
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
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+
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
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