[firebase-br] RES: Como faço para usar aspas duplas dentro de aspas simples no SQL de um client data set do delphi?
Marco antonio
marcobolacha em vicoldobrasil.com.br
Sex Nov 28 12:33:44 -03 2008
Não sei ao certo se eh o que vc quer. Mas tente
'SITUACAO_MONTAGEM = ' + chr(39) + 'Sem Montagem' + chr(39) + ' AND ...
Chr(39) acrescenta aspas.
-----Mensagem original-----
De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
nome de Danilo Cerne
Enviada em: quinta-feira, 27 de novembro de 2008 11:01
Para: lista em firebase.com.br
Assunto: Como faço para usar aspas duplas dentro de aspas simples no SQL de
um client data set do delphi?
Olá Pessoal!
Estou montando um relatório utilizando QuickReport.
Criei um formulário, apenas contendo:
> 2 EditMask (que são: edtDataIni e edtDataFin);
> 1 RadioGroup(com as opções: 1-Listar Tudo, 2-À Montar e 3-Sem
Montagem);
Explicação:
Listar Tudo, À Montar e Sem Montagem, pertencem a um dbComboBox que
faz relação com a tabela de Orçamento que possuo. Ou seja, na tabela de
orçamento eu tenho um campo que chama-se Situacao_Montagem, que ora recebe
do formulário a opção Listar Tudo, ora a opção À Montar e ora a opção Sem
Montagem.
> 2 Buttons(que são: btnOK e btnCancela);
Este formulário será usado para gerar um relatório simples, quando
selecionado a primeira opção, será listado no relatório todos os registros
da situação tanto À Montar, quanto Sem Montagem.
Agora quando selecionado À Montar, será mostrado apenas os registros que
tiverem o campo Situacao_Montagem igual a À Montar e quando selecionado a
opção Sem Montagem será mostrado os registros referentes ao campo
Situacao_Montagem igual a Sem Montagem. Ok! Como podem reparar, não deixa de
ser um relatório simples. Tenho certeza que muitos já montaram algum
parecido!
Trabalho como programador um pouco menos que 1 ano em uma Indústria em
Ribeirão Preto - SP, sou apenas um iniciante, tenho aprendido muitos
conceitos e tenho gostado por demais! Uso o SGBD Firebird versão 2.0, e suas
tecnologias de acesso a base de dados, Client Data Set, Data Set Provider,
SQLQuery, mas como podem ver eu apenas resumi o meu formulário e não citei o
meu problema que estou tendo, mas a partir de agora vou detalhá-lo.
É o seguinte:
No evento on_click do botão btnOk, fiz a seguinte implementação:
cdsRelOrcMont.Active := false;
qryRelOrcMont.SQL.Clear;
case RadioGroup1.ItemIndex of
0 : begin
// Listar Todos os registros que o campo Situacao_Montagem for
igual a: À Montar e Sem Montagem
qryRelOrcMont.SQL.Add('SELECT CLI.NOME, CLI.CIDADE, CLI.ESTADO,'+
'ORC.NUMERO,
ORC.REFPEDV, ORC.TOTALORCAMENTO, ORC.VALORAPROVADO, ORC.DATA_MONTAGEM,
ORC.SITUACAO_MONTAGEM'+
' FROM ORCAMENTO ORC');
// Campos que quero que sejam listado no meu relatório.
qryRelOrcMont.SQL.Add('LEFT JOIN CLIENTES CLI ON CLI.REFCLI =
ORC.REFCLI');
qryRelOrcMont.SQL.Add('WHERE ORC.VALORAPROVADO <> 0 AND '+
'ORC.DATA_MONTAGEM >=
:DATAINI AND ORC.DATA_MONTAGEM <= :DATAFIN'); // Aqui
qryRelOrcMont.Params[0].DataType := ftDate;
qryRelOrcMont.Params[0].ParamType := ptInput;
qryRelOrcMont.Params[1].DataType := ftDate;
qryRelOrcMont.Params[1].ParamType := ptInput;
end;
1 : begin
// Listar somente os registros que o campo Situacao_Montagem for
igual a: À Montar.
qryRelOrcMont.SQL.Add('SELECT CLI.NOME, CLI.CIDADE, CLI.ESTADO,'+
'ORC.NUMERO,
ORC.REFPEDV, ORC.TOTALORCAMENTO, ORC.VALORAPROVADO, ORC.DATA_MONTAGEM,
ORC.SITUACAO_MONTAGEM'+
' FROM ORCAMENTO ORC');
qryRelOrcMont.SQL.Add('LEFT JOIN CLIENTES CLI ON CLI.REFCLI =
ORC.REFCLI');
qryRelOrcMont.SQL.Add('WHERE ORC.VALORAPROVADO <> 0 AND '+
'ORC.DATA_MONTAGEM >=
:DATAINI AND ORC.DATA_MONTAGEM <= :DATAFIN AND '+
'SITUACAO_MONTAGEM =
''Montar'' AND DATA_MONTAGEM IS NULL');
qryRelOrcMont.Params[0].DataType := ftDate;
qryRelOrcMont.Params[0].ParamType := ptInput;
qryRelOrcMont.Params[1].DataType := ftDate;
qryRelOrcMont.Params[1].ParamType := ptInput;
end;
2 : begin
// Listar somente os registros que o campo Situacao_Montagem for
igual a: Sem Montagem.
qryRelOrcMont.SQL.Add('SELECT CLI.NOME, CLI.CIDADE, CLI.ESTADO,'+
'ORC.NUMERO,
ORC.REFPEDV, ORC.TOTALORCAMENTO, ORC.VALORAPROVADO, ORC.DATA_MONTAGEM,
ORC.SITUACAO_MONTAGEM'+
' FROM ORCAMENTO ORC');
qryRelOrcMont.SQL.Add('LEFT JOIN CLIENTES CLI ON CLI.REFCLI =
ORC.REFCLI');
qryRelOrcMont.SQL.Add('WHERE ORC.VALORAPROVADO <> 0 AND '+
'ORC.DATA_MONTAGEM >=
:DATAINI AND ORC.DATA_MONTAGEM <= :DATAFIN AND '+
'SITUACAO_MONTAGEM =
''Sem Montagem'' AND DATA_MONTAGEM IS NOT NULL');
qryRelOrcMont.Params[0].DataType := ftDate;
qryRelOrcMont.Params[0].ParamType := ptInput;
qryRelOrcMont.Params[1].DataType := ftDate;
qryRelOrcMont.Params[1].ParamType := ptInput;
end;
end;
cdsRelOrcMont.FetchParams; //Aqui eu carrego meus parâmetros para o client
data set
cdsRelOrcMont.Params[0].Value := DataI.text;
cdsRelOrcMont.Params[1].Value := DataF.text;
cdsRelOrcMont.Active := true; //Aqui ativo a tabela Orçamento
case rg1.ItemIndex of
0 : begin
QRLabel1.Caption := 'Relatório de Orçamentos de Montadores';
QRLabel1.Alignment := taCenter;
end;
1 : begin
QRLabel1.Caption := 'Relatório de Orçamentos de Montadores À
Montar';
QRLabel1.Alignment := taCenter;
end;
2 : begin
QRLabel1.Caption := 'Relatório de Orçamentos de Montadores Sem
Montagem';
QRLabel1.Alignment := taCenter;
end;
end;
QRLabel135.Caption := 'Período de: '+DataI.Text+' até '+DataF.text;
QRLabel153.Caption := 'Por '+PegaUsuario(Pont^.codUsu);
RelOrcMont.QuickRep1.Preview; // Abro o relatório
Pessoal de todo esse código a cima, a minha dúvida é a seguinte:
No WHERE, quando eu checo, se o campo Situacao_Montagem da tabela Orcamento
do banco de dados, for igual as opções Listar Tudo, ou a À Montar ou também
a Sem Montagem. Eu quero, que, uma das 3 opções que citei a cima, me
retornem no relatório, as respectivas situações, que são: Todos os registros
da Situacao_Montagem(À Montar e Sem Montagem), ou somente os registros que o
campo Situacao_Montagem(da Tabela Orçamento do Banco) for igual a À Montar
ou somente os registros que o campo Situacao_Montagem(da Tabela Orçamento do
Banco) for igual a Sem Montagem.
Após tudo compilado, eu executo o sistema(F9), daí ora quando seleciono
Listar Tudo, me traz todos os registros, ora quando eu seleciono À Montar
não me traz os registros, mas quando seleciono Sem Montagem me traz todos os
registros cujo o valor da tabela Orçamento do banco de dados for igual a Sem
Montagem, o que me deixa confuso, é que, aparentemente da mesma forma que
programei para a situação 2(À Montar) do case, eu programei para a situação
3(Sem Montagem) do case. O que diferencia um do outro, é quando checo se o
valor do campo data_montagem for IS NOT NULL para Sem Montagem e IS NULL
para À Montar. Alguém sabe onde estou errando?
Esta implementação, apesar de talvez, aparentar ser comprida, não deixa de
ser simples, porém acredito que estou tendo dificuldade ou no apóstrofo,
pois, não sei ao certo quando utilizo aspas "(duplas) dentro de aspas '
'(simples).
Alguém saberia me dizer quais das duas linhas a baixo estão corretas:
('SITUACAO_MONTAGEM = ' 'Sem Montagem' ' AND DATA_MONTAGEM IS
NOT NULL'); //Aqui uso Aspas Simples ' ' string do banco ' '
('SITUACAO_MONTAGEM = ''Sem Montagem'' AND DATA_MONTAGEM IS
NOT NULL'); //Aqui uso Aspas Duplas " string do banco "
Os dois casos eu testei e ainda não está trazendo para mim quando seleciono
o campo Situacao_Montagem igual a À Montar.
Se alguém poder me ajudar, eu agradeço muito!
Obrigado.
Danilo Cerne.
danilocerne em msn.com ou
d-cerne em uol.com.br
Mais detalhes sobre a lista de discussão lista