Whats new? | Login | Parceiros
Cadastre-se | Atendimento | RSS

Fórum DevMedia

Autor
Mensagem
Informações sobre o chamado:
Criado em: 29/1/2010 1:52:14 PM
Status deste chamado: em andamento
Última ação ref. este chamado: Chamado resp. pelo usuario
  Ver histórico do chamado
NELSON HERRERA
 

País: Brasil
Estado: CE
Cidade: FORTALEZA
Mensagens: 1
#ID: 14841   Postado em: 29/1/2010 1:52:14 PM

Caros colegas,

Estou com uma bronca e preciso de ajuda, vou tentar resumir:

Estou desenvolvendo uma aplicação em Delphi7 e inicialmente estava usando o Firebird como base de dados local.

Para uma das telas tenho um DM com as seguintes tabelas:

tAuxProtocolo -> tAuxProtocoloEdicao -> tAuxEdicao -> tAuxPagina -> tAuxPaginaDefeito

todas relacionadas como mestre-detalhe, uma embaixo da outra
utilizando TSQLQuery e ClientDataset para cada tabela, us DataSource para cada tabela que será mestre de outra e com um unico componente DataSetProvider ligado a tabela tAuxProtocolo, que é a mestre de todas:

Os campos de ligação das tabelas são a chave primaria do tipo "Integer Not Null"

Até então estava tudo rodando direito no Firebird.

Agora passei o banco de dados da rede que é o SQLServer 2005 e ao migrar a conexão começei a ter algumas incompatibilidades.

OBS: A estrutura das tabelas tanto no Firebird como no SQLServer é a mesma.

1) O primeiro problema diz respeito a executar uma SQL com parâmetro de tipo integer. Ex:

A tabela tAuxEdicao esta relacionada com a tabela tAuxProtocoloEdicao pelo campo aedcCodigo que é do tipo integer not null, a instrução SQL é:

select * from tAuxEdicao where (aedcCodigo=:aedcCodigo) order by aedcData

As propriedade do parametro :aedcCodigo são:
        DataType = ftInteger
        ParamType = ptInput

O problema surge quando quero abrir o qrytAuxEdicao (Active:=True) ou ao tentar incluir os campos no Fields Editor.

As mensagens de erro são as seguintes:

"EDatabaseError with message 'SQL state: HY000, SQL Error Code: 0'
Valores de parametros de entrada inválidos
Verifique os detalhes dos valores de status"

e depois:

"dbExpress Error: [0x0009]: Invalid parameter"

Para resolver o problema instalei as atualizações do Delphi7: d7_ent_upd1.exe e d7_ent_upd1_1.exe, mas o problema continua.

2) O outro problema esta em executar uma SQL com o parâmetro do tipo Data num campo da tabela do Tipo TimeStamp no FB e DateTime no SQLServer. Ex:

Num TSQLQuery tenho o seguinte:

select * from tAuxProtocolo where
(aptcData Between :vDataIni and :vDataFim)
order by aptcData

Os parametros são:

- Name = vDataIni
 DataType = ftDateTime
 ParamType = ptInput

- Name = vDataFim
  DataType = ftDateTime
  ParamType = ptInput

Ao tentar abrir o SQLQuery, o erro: "dbExpress Error: [0x0003]: Invalid field type" aparece.

Para resolver o problema mudei o DataType dos parâmetros vDataIni e vDataFim para ftTimeStamp e depois para ftDate mas a mesma mensagem de erro aparece. As vezes consegue executar com o parametro do tipo ftTimeStamp mas a query não traz nada.
Ao executar a mesma query com o parametro ftDate no Firebird recebo os registros esperados.

Já pesquisei na internet e as soluções que encontrei foram as que tentei acima, sem nenhum resultado.

Ja trabalhei neste projeto mais de um mês e cheguei a um ponto da implementação que não consigo continuar.

Se alguém souber qual o problema por favor poste aqui.

Grato pela atenção,

Nelsonhm

Álison Bissoli
 

País: Brasil
Estado: MG
Cidade: Belo Horizonte
Mensagens: 60
#ID: 14913   Postado em: 1/2/2010 7:45:21 AM
Bom dia,
Verifique se é o formato da data que está sendo passada no parâmetro.

 
NELSON HERRERA
 

País: Brasil
Estado: CE
Cidade: FORTALEZA
Mensagens: 1
#ID: 14955   Postado em: 1/2/2010 1:53:44 PM
O problema é que a SQL não me retorna nada. Se retiro os parametros, aí sim me retorna tudo o que está no banco.
 
Ao executar uma instrução SQL numa coluna da tabela do Tipo DateTime no SQLServer2005.

Ex:

a data no banco de dados está: 2009-12-22 00:00:00.000

a instrução SQL do SQLQuery1 é:

select * from tPedido
where (Data Between :vDataIni and :vDataFim)

paso o valor dos parametros assim:

with SQLQuery1 do
begin
  Close;
  Params.ParamByName('vDataIni').AsSQLTimeStamp := StrToSQLTimeStamp(MaskEdit1.Text);
  Params.ParamByName('vDataFim').AsSQLTimeStamp := StrToSQLTimeStamp(MaskEdit2.Text);
  Open;
end;

já tentei passar o valor dos parametros nos formatos:

22/12/2009 00:00:00.000 <== da mensagem de erro "Could not parse SQL TimeStamp string"
22/12/2009 00:00:00 <== não apresenta erro mas não retorna nada
22/12/2009 <== não apresenta erro mas não retorna nada

Já tentei também mudando o DataType dos parametros para ftDate e ftDateTime mas a query continua sem retornar nada.

with SQLQuery1 do
begin
  Close;
  Params.ParamByName('vDataIni').AsDate := StrToDate(MaskEdit1.Text);
  Params.ParamByName('vDataFim').AsDate := StrToDate(MaskEdit2.Text);
  Open;
end;

Aonde está o erro ?
 
Obrigado pela atenção.
 
Nelsonhm

 

 
Emerson
 

País: Brasil
Estado: SP
Cidade: São Paulo
Mensagens: 482
Usuário DevMaster


#ID: 14984   Postado em: 2/2/2010 9:01:07 AM
tente:

parâmetros:
 Name = vDataIni
 DataType = ftTimeStamp
 ParamType = ptInput

 Name = vDataFim
 DataType = ftTimeStamp
 ParamType = ptInput

(na verdade, nem precisa configurar o tipo do parâmetro, pois você pode fazê-lo na passagem dos valores, usando o .AsXXXXX)

with SQLQuery1 do
begin
  Close;
  Params.ParamByName('vDataIni').AsSQLTimeStamp := StrToSQLTimeStamp(MaskEdit1.Text);
  Params.ParamByName('vDataFim').AsSQLTimeStamp := StrToSQLTimeStamp(MaskEdit2.Text);
  Open;
end;

 


DevMedia Group   www.devmedia.com.br   |   www.javafree.org   |   www.mrbool.com
2010 - Todos os Direitos Reservados a DevMedia Group - (21) 3382-5038