TsqlConection x TsqlQuery
Olá,
Delphi 7
Criei uma aplicação com cadatro de comandos sql, crio os comandos e saldo no sqlServer 2005. Utilizo Ado para recuperar este sql conforme seu codigo e passo para TsqlQuery da paleta dbexpress:
with sqlDados do
begin
Close;
SQL.Clear;
SQL.Add( AsqlSql.fieldbyName('COMANDO').ASSTRING);
Open;
end;
Porem estou com o seguinte problema todo comando quando uso data o comando sql não funciona corretamente. Já tentei varias formas e não obtive sucesso, gostaria de resolver esta situação sem mudar para ADO. att.. Ricardo --AND DATA_VALIDADE >= (SELECT CONVERT(VARCHAR(11),GETDATE(),121)) SELECT
0 AS U_PKEY,
100 AS U_ORGVENDA,
P.COD_COND_PGTO AS S_CODPRAZO,
COD_LISTA AS S_CODTABELA,
1 AS U_PRECO_REFERENCIA,
50 AS D_VALOR_PEDIDO_MINIM,
CASE
WHEN ISNULL(PERC_JUROS,0) = 0 THEN 0
WHEN DIAS_PARC = 3 THEN 0
WHEN DIAS_PARC = 1 THEN 0
ELSE PERC_JUROS / 30 * (QTDE_PARCELA * DIAS_PARC)
END AS D_PERCENTUAL_AJUSTE,
DIAS_PARC AS U_DIASENTRADA,
QTDE_PARCELA AS U_NUMERO_PARCELA,
DIAS_PARC AS U_DDENTREPARCELA,
DIAS_PARC AS U_DDENTREPARCELARATEIO,
16 AS U_STATUS,
DESC_COND_PGTO AS S_DESCRICAO,
0 AS S_TABELA_AMARRACAO,
0 AS U_PERMISSAO_PRAZOS,
1 U_QTDE_MINIMA_ITENS,
0 U_PRAZO_MEDIO,
0 U_DIAS_MIN_ENTRE_PARC,
0 U_DIAS_MAX_ENTRE_PARC,
0 D_VALOR_PEDIDO_MAXIMO FROM TBCONDPGTO P
LEFT OUTER JOIN
(SELECT P1.COD_COND_PGTO, CASE WHEN ISNULL(P2.PRAZO,0) = 0 THEN P1.PRAZO ELSE ISNULL(P2.PRAZO,0) - P1.PRAZO END DIAS_PARC
FROM TBDESDOBRAPGTO P1
LEFT OUTER JOIN TBDESDOBRAPGTO P2
ON P1.COD_COND_PGTO = P2.COD_COND_PGTO
AND P2.NUM_PARCELA ='2'
WHERE P1.NUM_PARCELA ='1'
AND P1.COD_COND_PGTO LIKE('P%') ) DP
ON P.COD_COND_PGTO = DP.COD_COND_PGTO,
TBLISTAPRECO
WHERE CLASSE IN('V','A')
AND COD_LISTA < 300
AND P.COD_COND_PGTO LIKE('P%')
--AND DATA_VALIDADE >= (SELECT CONVERT(VARCHAR(11),GETDATE(),121)) --AND COD_LISTA ='1'
--SELECT * FROM TBCONDPGTO
--SELECT * FROM TBLISTAPRECO
--SELECT * FROM tbdesdobrapgto WHERE COD_COND_PGTO LIKE('P108%')
begin
Close;
SQL.Clear;
SQL.Add( AsqlSql.fieldbyName('COMANDO').ASSTRING);
Open;
end;
Porem estou com o seguinte problema todo comando quando uso data o comando sql não funciona corretamente. Já tentei varias formas e não obtive sucesso, gostaria de resolver esta situação sem mudar para ADO. att.. Ricardo --AND DATA_VALIDADE >= (SELECT CONVERT(VARCHAR(11),GETDATE(),121)) SELECT
0 AS U_PKEY,
100 AS U_ORGVENDA,
P.COD_COND_PGTO AS S_CODPRAZO,
COD_LISTA AS S_CODTABELA,
1 AS U_PRECO_REFERENCIA,
50 AS D_VALOR_PEDIDO_MINIM,
CASE
WHEN ISNULL(PERC_JUROS,0) = 0 THEN 0
WHEN DIAS_PARC = 3 THEN 0
WHEN DIAS_PARC = 1 THEN 0
ELSE PERC_JUROS / 30 * (QTDE_PARCELA * DIAS_PARC)
END AS D_PERCENTUAL_AJUSTE,
DIAS_PARC AS U_DIASENTRADA,
QTDE_PARCELA AS U_NUMERO_PARCELA,
DIAS_PARC AS U_DDENTREPARCELA,
DIAS_PARC AS U_DDENTREPARCELARATEIO,
16 AS U_STATUS,
DESC_COND_PGTO AS S_DESCRICAO,
0 AS S_TABELA_AMARRACAO,
0 AS U_PERMISSAO_PRAZOS,
1 U_QTDE_MINIMA_ITENS,
0 U_PRAZO_MEDIO,
0 U_DIAS_MIN_ENTRE_PARC,
0 U_DIAS_MAX_ENTRE_PARC,
0 D_VALOR_PEDIDO_MAXIMO FROM TBCONDPGTO P
LEFT OUTER JOIN
(SELECT P1.COD_COND_PGTO, CASE WHEN ISNULL(P2.PRAZO,0) = 0 THEN P1.PRAZO ELSE ISNULL(P2.PRAZO,0) - P1.PRAZO END DIAS_PARC
FROM TBDESDOBRAPGTO P1
LEFT OUTER JOIN TBDESDOBRAPGTO P2
ON P1.COD_COND_PGTO = P2.COD_COND_PGTO
AND P2.NUM_PARCELA ='2'
WHERE P1.NUM_PARCELA ='1'
AND P1.COD_COND_PGTO LIKE('P%') ) DP
ON P.COD_COND_PGTO = DP.COD_COND_PGTO,
TBLISTAPRECO
WHERE CLASSE IN('V','A')
AND COD_LISTA < 300
AND P.COD_COND_PGTO LIKE('P%')
--AND DATA_VALIDADE >= (SELECT CONVERT(VARCHAR(11),GETDATE(),121)) --AND COD_LISTA ='1'
--SELECT * FROM TBCONDPGTO
--SELECT * FROM TBLISTAPRECO
--SELECT * FROM tbdesdobrapgto WHERE COD_COND_PGTO LIKE('P108%')
Frigorifico Sa
Curtidas 0
Respostas
Rodrigo Mourão
17/08/2009
Olá amigo, desculpe a demora em responder.
Bem vamos ver se eu entendi. Voce tem um banco SqlServer 2005 e nele vc tem uma tabela onde guarda comandos SQL. Então utilizando ADO você acessa está tabela e recupera um comando sql qualquer. Após isso vc passa essa instrução para um SqlQeury do DBX para então executá-las no banco, correto ?
Você cita que ocorre um erro na execução da instrução, acredito que seja na hora de executar a instrução no DBX. Neste caso minha sugestão é a seguinte:
Coloque um Break Point na linha onde vc passa o comando SQL:
with sqlDados do
begin
Close;
SQL.Clear;
SQL.Add( AsqlSql.fieldbyName('COMANDO').ASSTRING); <-- Break Point Aqui.
Open;
end;
Execute a aplicação e quando ele parar no Break point selecione com o Mouse a instrução AsqlSql.fieldbyName('COMANDO').ASSTRING e com ela selecionada pressione Crtl+F7. Isso vai fazer com que vc possa ver exatamente o que esta retornando do banco de dados e o que sera passado para o SQLQuery.
Copie este conteudo, remova possiveis #13#10 que possam aparecer e tente executar no banco de dados. Se o comando copiada executar dentro do banco então o comando esta correto, caso não funcione então começaremos a analisar o comando para ver se esta no padrão.
Ficarei no aguardo !!
Abs!
Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi
Bem vamos ver se eu entendi. Voce tem um banco SqlServer 2005 e nele vc tem uma tabela onde guarda comandos SQL. Então utilizando ADO você acessa está tabela e recupera um comando sql qualquer. Após isso vc passa essa instrução para um SqlQeury do DBX para então executá-las no banco, correto ?
Você cita que ocorre um erro na execução da instrução, acredito que seja na hora de executar a instrução no DBX. Neste caso minha sugestão é a seguinte:
Coloque um Break Point na linha onde vc passa o comando SQL:
with sqlDados do
begin
Close;
SQL.Clear;
SQL.Add( AsqlSql.fieldbyName('COMANDO').ASSTRING); <-- Break Point Aqui.
Open;
end;
Execute a aplicação e quando ele parar no Break point selecione com o Mouse a instrução AsqlSql.fieldbyName('COMANDO').ASSTRING e com ela selecionada pressione Crtl+F7. Isso vai fazer com que vc possa ver exatamente o que esta retornando do banco de dados e o que sera passado para o SQLQuery.
Copie este conteudo, remova possiveis #13#10 que possam aparecer e tente executar no banco de dados. Se o comando copiada executar dentro do banco então o comando esta correto, caso não funcione então começaremos a analisar o comando para ver se esta no padrão.
Ficarei no aguardo !!
Abs!
Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi
GOSTEI 0
Rodrigo Mourão
17/08/2009
Olá Amigo,
A ajuda foi suficiente ? Podemos encerrar o chamado ?
Abs!!!
Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi
A ajuda foi suficiente ? Podemos encerrar o chamado ?
Abs!!!
Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi
GOSTEI 0
Frigorifico Sa
17/08/2009
Rodrigo,
Me de mais um tempinho.
Alterei o sql e funcionou assim como anteriormente. Vou fazer mais uns testes. E ver se não estou com um problema intermitente.
AND DATA_VALIDADE >= CONVERT(VARCHAR(11),GETDATE()-1,121)
Att..
Ricardo
GOSTEI 0
Rodrigo Mourão
17/08/2009
Sem problemas !!!
Abs !!!
Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi
Abs !!!
Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi
GOSTEI 0
Devmedia
17/08/2009
Senhor,
por falta de retorno estamos encerrando o chamado. Caso ainda tenha dúvidas sobre o assunto aqui tratado, por favor, volte a postar aqui mesmo que o consultor voltará a lhe atender.
por falta de retorno estamos encerrando o chamado. Caso ainda tenha dúvidas sobre o assunto aqui tratado, por favor, volte a postar aqui mesmo que o consultor voltará a lhe atender.
GOSTEI 0