| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
BrTattoo Novato

Registrado: Domingo, 19 de Mai de 2013 Mensagens: 13
|
Enviada: Dom Mai 19, 2013 7:47 pm Assunto: Passar parâmetros para um objeto TDBXCommand |
|
|
Boa noite galera, estou tentando passar parâmetros para uma instrução SQL sem dataset, ou seja utilizando TDBXCommandTypes.DbxSQL do SQLConnection, mas esta dando o erro: TDBXError with message 'Inavalid Ordinal: -1'
Segue abaixo o código:
| Código: | function TServerMethods1.PesquisaData: TDBXReader;
var
DataIni, DataFin: TDate;
begin
ShortDateFormat := 'dd.mm.yyyy';
DataIni := Date;
DataFin := Date + 1;
SQLConnection.Open;
conn := SQLConnection.DBXConnection.CreateCommand;
conn.CommandType := TDBXCommandTypes.DbxSQL;
conn.Text := 'select NOME_CLIENTE, DATA_PREVISTA from PROPOSTA where (:DataIni >= and :DataFin<=)';
conn.Parameters.Parameter[QuotedStr(DateToStr(Dataini))];TDBXError with message 'Inavalid Ordinal: -1'
conn.Parameters.Parameter[QuotedStr(DateToStr(DataFin))];
if not conn.IsPrepared then
begin
conn.Prepare;
end;
Result := conn.ExecuteQuery;
end; |
|
|
| Voltar ao Topo |
|
 |
marcosalles Moderador

Registrado: Quarta-Feira, 26 de Março de 2008 Mensagens: 1695 Localização: Muriaé Mg
|
|
| Voltar ao Topo |
|
 |
BrTattoo Novato

Registrado: Domingo, 19 de Mai de 2013 Mensagens: 13
|
Enviada: Seg Mai 20, 2013 11:56 am Assunto: |
|
|
muito obrigado pela ajuda marcosalles, mas agora o delphi não esta reconhecendo o parametro informando que o campo Data1 é desconhecido, mas na verdade ele é um parametro.
Segue o código:
| Código: | function TServerMethods1.PesquisaData: TDBXReader;
var
DataIni, DataFin: TDate;
Param: TDBXParameter;
begin
FormatSettings.ShortDateFormat := 'dd.mm.yyyy';
DataIni := Date;
DataFin := Date + 1;
SQLConnection.Open;
conn := SQLConnection.DBXConnection.CreateCommand;
conn.CommandType := TDBXCommandTypes.DbxSQL;
conn.Text := 'select NOME_CLIENTE, DATA_PREVISTA from PROPOSTA where (PROPOSTA.DATA_PREVISTA >= :Data1 and PROPOSTA.DATA_PREVISTA <= :Data2)';
Param := conn.CreateParameter;
Param.DataType := TDBXDataTypes.WideStringType;
Param.Name := 'Data1';
conn.Parameters.AddParameter(Param);
Conn.Parameters.Parameter['Data1'].Value.SetWideString(DateToStr(DataIni));
Param := conn.CreateParameter;
Param.DataType := TDBXDataTypes.WideStringType;
Param.Name := 'Data2';
conn.Parameters.AddParameter(Param);
Conn.Parameters.Parameter['Data2'].Value.SetWideString(DateToStr(DataFin));
if not conn.IsPrepared then
begin
conn.Prepare;
end;
Result := conn.ExecuteQuery;
conn.Free;
end; |
A mensagem de erro é: Project Servidor.exe raised exception class TDBXError with message 'Column unknown DATA1
At line 1, column 84'. |
|
| Voltar ao Topo |
|
 |
Batera Colaborador


Registrado: Quarta-Feira, 23 de Julho de 2008 Mensagens: 4899 Localização: Maringá
|
|
| Voltar ao Topo |
|
 |
BrTattoo Novato

Registrado: Domingo, 19 de Mai de 2013 Mensagens: 13
|
Enviada: Sáb Mai 25, 2013 5:34 pm Assunto: |
|
|
Então Batera obrigado pela dica, ajudou bastante, mas agora o meu sql não esta retornado informação alguma segue o trecho do código:
| Código: | SQLConnection.Open;
conn := SQLConnection.DBXConnection.CreateCommand;
conn.CommandType := TDBXCommandTypes.DbxSQL;
conn.Text := 'select NOME_CLIENTE, DATA_PREVISTA from PROPOSTA where (PROPOSTA.DATA_PREVISTA >= (?) and PROPOSTA.DATA_PREVISTA <= (?))';
Param := conn.CreateParameter;
Param.DataType := TDBXDataTypes.WideStringType;
Param.Name := 'Data1';
conn.Parameters.AddParameter(Param);
Conn.Parameters.Parameter[0].Value.SetWideString(DateToStr(DataIni));
Param := conn.CreateParameter;
Param.DataType := TDBXDataTypes.WideStringType;
Param.Name := 'Data2';
conn.Parameters.AddParameter(Param);
Conn.Parameters.Parameter[1].Value.SetWideString(DateToStr(DataFin));
if not conn.IsPrepared then
begin
conn.Prepare;
end;
Result := conn.ExecuteQuery;
conn.Free; |
Se alguem puder ajudar com a forma correta de construir esta consulta agradeço. |
|
| Voltar ao Topo |
|
 |
Batera Colaborador


Registrado: Quarta-Feira, 23 de Julho de 2008 Mensagens: 4899 Localização: Maringá
|
Enviada: Sáb Mai 25, 2013 7:26 pm Assunto: |
|
|
| Se você rodar essa SQL direto no banco de dados, a busca retorna resultados? |
|
| Voltar ao Topo |
|
 |
BrTattoo Novato

Registrado: Domingo, 19 de Mai de 2013 Mensagens: 13
|
Enviada: Sáb Mai 25, 2013 7:37 pm Assunto: |
|
|
| Batera escreveu: | | Se você rodar essa SQL direto no banco de dados, a busca retorna resultados? |
retorna sim, mostra os dados da consulta corretamente. |
|
| Voltar ao Topo |
|
 |
Batera Colaborador


Registrado: Quarta-Feira, 23 de Julho de 2008 Mensagens: 4899 Localização: Maringá
|
Enviada: Sáb Mai 25, 2013 9:45 pm Assunto: |
|
|
BrTattoo, só uma observação: você sabe que o ExecuteQuery retorna um dado do tipo TDBXReader, certo?
Como você está recebendo esse dado quando chama o método?
No meu caso, eu criei um ClientDataSet em tempo de execução, copiei os dados do TDBXReader para ele e retornei o dado como OleVariant:
| Código: | var
Reader: TDBXReader;
Dados: TClientDataSet;
begin
Dados := TClientDataSet.Create(nil);
try
.
.
.
Reader := conn.ExecuteQuery;
TDBXDataSetReader.CopyReaderToClientDataSet(Reader, Dados);
result := Dados.Data;
finally
.
.
FreeAndNil(Dados);
end;
end; |
|
|
| Voltar ao Topo |
|
 |
BrTattoo Novato

Registrado: Domingo, 19 de Mai de 2013 Mensagens: 13
|
Enviada: Sáb Mai 25, 2013 9:52 pm Assunto: |
|
|
| Batera escreveu: | BrTattoo, só uma observação: você sabe que o ExecuteQuery retorna um dado do tipo TDBXReader, certo?
Como você está recebendo esse dado quando chama o método?
No meu caso, eu criei um ClientDataSet em tempo de execução, copiei os dados do TDBXReader para ele e retornei o dado como OleVariant:
| Código: | var
Reader: TDBXReader;
Dados: TClientDataSet;
begin
Dados := TClientDataSet.Create(nil);
try
.
.
.
Reader := conn.ExecuteQuery;
TDBXDataSetReader.CopyReaderToClientDataSet(Reader, Dados);
result := Dados.Data;
finally
.
.
FreeAndNil(Dados);
end;
end; |
|
Bom Batera eu estou recebendo estes dados em uma aplicação android |
|
| Voltar ao Topo |
|
 |
Batera Colaborador


Registrado: Quarta-Feira, 23 de Julho de 2008 Mensagens: 4899 Localização: Maringá
|
Enviada: Sáb Mai 25, 2013 10:04 pm Assunto: |
|
|
Entendi...
Bom, então acho que você só precisa tratar o retorno desses dados. Por exemplo, a função recebe o result como TDBXReader, certo? Agora você precisa "traduzir" esse TDBXReader para ser exibido na aplicação. É por isso que te dei a ideia do TClientDataSet. O problema é que eu não tenho experiência com Android, então não sei se a solução que te passei é funcional... |
|
| Voltar ao Topo |
|
 |
BrTattoo Novato

Registrado: Domingo, 19 de Mai de 2013 Mensagens: 13
|
Enviada: Sáb Mai 25, 2013 10:07 pm Assunto: |
|
|
| Batera escreveu: | Entendi...
Bom, então acho que você só precisa tratar o retorno desses dados. Por exemplo, a função recebe o result como TDBXReader, certo? Agora você precisa "traduzir" esse TDBXReader para ser exibido na aplicação. É por isso que te dei a ideia do TClientDataSet. O problema é que eu não tenho experiência com Android, então não sei se a solução que te passei é funcional... |
Muito obrigado pela ajuda Batera, continuarei fazendo teste aqui e quando conseguir posto a solução. |
|
| Voltar ao Topo |
|
 |
Batera Colaborador


Registrado: Quarta-Feira, 23 de Julho de 2008 Mensagens: 4899 Localização: Maringá
|
Enviada: Sáb Mai 25, 2013 10:15 pm Assunto: |
|
|
Quem sabe o marcosalles não dá uma passadinha por aqui e sugere uma solução melhor!
Ele é o mestre do DBX4, rsrs. |
|
| Voltar ao Topo |
|
 |
|