Migração Delphi7 x Firebird 1.5 para SQL Server 2005
29/01/2010
0
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
Nelson Herrera
Posts
01/02/2010
Alison Bissoli
01/02/2010
Nelson Herrera
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
02/02/2010
Emerson Nascimento
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;
Clique aqui para fazer login e interagir na Comunidade :)