Onde fica o resultado de uma query???
Oi pessoal,
Minha dúvida é a seguinte.
Estou trabalhando em um sistema já semi-pronto, e portanto não posso mudar o modo como as coisas estão feitas, e tenho que continuar pelo caminho existente.
O sistema possui um Data Module com diversos componentes TIBDataSet (um para cada formulário).
Quando é preciso fazer uma query, o comando SQL é passado para a propriedade SelectSQL do TIBDataSet e em seguida é chamado o método Open para rodá-lo.
Os componentes DBEdit do formulário são associados aos campos da tabela pesquisada através da propriedade DataField. Até aí tudo bem, está funcionando legal.
O problema é que eu tenho alguns formulários que têm checkbox e radiobutton, e preciso setá-los conforme a informação que está gravada na tabela. Só que para isso, eu preciso buscar essa informação em algum lugar e eu não sei que lugar é esse. Quando eu rodo uma query passando-a para a propriedade SelectSQL, o conteúdo dos campos vêm dentro dos DBEdits, mas para onde vão os campos que não possuem DBEDit associado a eles?
Eu pensei em criar novos DBEdits e mantê-los invisíveis e relacionados aos campos desejados e buscar os valores nesses DBEdits, e sei que isso funcionaria, mas eu tenho certeza que existe uma forma melhor de fazer isso.
Alguém poderia me ajudar?
Muito obrigado!
Minha dúvida é a seguinte.
Estou trabalhando em um sistema já semi-pronto, e portanto não posso mudar o modo como as coisas estão feitas, e tenho que continuar pelo caminho existente.
O sistema possui um Data Module com diversos componentes TIBDataSet (um para cada formulário).
Quando é preciso fazer uma query, o comando SQL é passado para a propriedade SelectSQL do TIBDataSet e em seguida é chamado o método Open para rodá-lo.
Os componentes DBEdit do formulário são associados aos campos da tabela pesquisada através da propriedade DataField. Até aí tudo bem, está funcionando legal.
O problema é que eu tenho alguns formulários que têm checkbox e radiobutton, e preciso setá-los conforme a informação que está gravada na tabela. Só que para isso, eu preciso buscar essa informação em algum lugar e eu não sei que lugar é esse. Quando eu rodo uma query passando-a para a propriedade SelectSQL, o conteúdo dos campos vêm dentro dos DBEdits, mas para onde vão os campos que não possuem DBEDit associado a eles?
Eu pensei em criar novos DBEdits e mantê-los invisíveis e relacionados aos campos desejados e buscar os valores nesses DBEdits, e sei que isso funcionaria, mas eu tenho certeza que existe uma forma melhor de fazer isso.
Alguém poderia me ajudar?
Muito obrigado!
Yankleber
Curtidas 0
Respostas
Weber
01/04/2004
Depois do Open da Query:
nomedocampo = nome do campo na tabela do banco de dados
voce ainda pode usar
.asInteger
.asDateTime
entre outros.
Edit1.Text := IBQuery1.FieldByName(´nomedocampo´).asString;
nomedocampo = nome do campo na tabela do banco de dados
voce ainda pode usar
.asInteger
.asDateTime
entre outros.
GOSTEI 0
Maxwell_monteiro
01/04/2004
com certeza o objeto IbDataSet de ter uma propriedade chamada fields e nesses fields estao os dados!
ex.: Edit1.text := IbDataSet1.Fields[0].AsString;
ou seja, vou pegar o primeiro campo da tabela e vou converte-lo para String e joga-lo dentro da propriedade text de um objeto Edit.
Só mais uma dica! de CTRL+F1 em cima de uma palavra no editor de codigo do delphi e vc tera o help!
ex.: Edit1.text := IbDataSet1.Fields[0].AsString;
ou seja, vou pegar o primeiro campo da tabela e vou converte-lo para String e joga-lo dentro da propriedade text de um objeto Edit.
Só mais uma dica! de CTRL+F1 em cima de uma palavra no editor de codigo do delphi e vc tera o help!
GOSTEI 0
Yankleber
01/04/2004
Oi pessoal,
Valeu pela ajuda, realmente funcionou como eu esperava.
Agora estou passando pelo problema inverso, ou seja, devolver o valor do checkbox para o campo na tabela.
Eu tentei fazer o seguinte: no IBDataSet, dento da propriedade ModifySQL, tem uma SQL montada, associando os campos da tabela ao DBEdit no form.
Minha dedução lógica foi que, uma vez que eu estou usando uma variável para setar os checkboxes, que eu poderia associá-la diretamente ao campo da tabela, assim (abaixo vai o conteúdo da minha propriedade ModifySQL):
update TIPOPAPEIS
set
PAPEL_ID = :PAPEL_ID,
PAPALT = :PAPALT,
PAPDESC = :PAPDESC,
PAPENV = :tPapEnv, << olha aqui o que eu fiz!
PAPENVSACO = :PAPENVSACO,
PAPGRAMAT = :PAPGRAMAT,
PAPKGMILH = :PAPKGMILH,
PAPLARG = :PAPLARG,
PAPLINHADAGUA = :PAPLINHADAGUA,
PAPPRECO = :PAPPRECO,
PAPTIRARETIRA = :PAPTIRARETIRA
where
PAPEL_ID = :OLD_PAPEL_ID
Entretanto, isso não funcionou, e ao alterar a tabela, o resultado foi que esse campo ficou com um conteúdo em branco (não Null, mas um caractere nulo tipo ´´).
Qual é o pulo do gato nessa situação????
Grato!
Valeu pela ajuda, realmente funcionou como eu esperava.
Agora estou passando pelo problema inverso, ou seja, devolver o valor do checkbox para o campo na tabela.
Eu tentei fazer o seguinte: no IBDataSet, dento da propriedade ModifySQL, tem uma SQL montada, associando os campos da tabela ao DBEdit no form.
Minha dedução lógica foi que, uma vez que eu estou usando uma variável para setar os checkboxes, que eu poderia associá-la diretamente ao campo da tabela, assim (abaixo vai o conteúdo da minha propriedade ModifySQL):
update TIPOPAPEIS
set
PAPEL_ID = :PAPEL_ID,
PAPALT = :PAPALT,
PAPDESC = :PAPDESC,
PAPENV = :tPapEnv, << olha aqui o que eu fiz!
PAPENVSACO = :PAPENVSACO,
PAPGRAMAT = :PAPGRAMAT,
PAPKGMILH = :PAPKGMILH,
PAPLARG = :PAPLARG,
PAPLINHADAGUA = :PAPLINHADAGUA,
PAPPRECO = :PAPPRECO,
PAPTIRARETIRA = :PAPTIRARETIRA
where
PAPEL_ID = :OLD_PAPEL_ID
Entretanto, isso não funcionou, e ao alterar a tabela, o resultado foi que esse campo ficou com um conteúdo em branco (não Null, mas um caractere nulo tipo ´´).
Qual é o pulo do gato nessa situação????
Grato!
GOSTEI 0
Paulo_amorim
01/04/2004
Olá
Assumindo que o seu campo PAPENV seja Char(1), pode-se fazer um if para passar o Parametro:
if CheckBox1.Checked then
qry.ParamByName(´tPapEnv´).AsString := ´S´
else qry.ParamByName(´tPapEnv´).AsString := ´N´
Espero que ajude
Ate+
Assumindo que o seu campo PAPENV seja Char(1), pode-se fazer um if para passar o Parametro:
if CheckBox1.Checked then
qry.ParamByName(´tPapEnv´).AsString := ´S´
else qry.ParamByName(´tPapEnv´).AsString := ´N´
Espero que ajude
Ate+
GOSTEI 0
Yankleber
01/04/2004
Oi Paulo,
Obrigado pela resposta, mas não deu certo. Quando eu tento passar pela propriedade ParamByName ele diz que o campo não existe. Se eu substituíla por FieldByName não dá erro, mas também não faz nada: simplesmente coloca um caractere nulo dentro do campo.
Cara, estou frustradíssimo com o Delphi, parece que nada funciona direito e demanda-se muito esforço e dezenas de tentativas até que alguma coisa dê certo, e está sendo realmente um pesadelo para mim trabalhar nele, pois pensei que fosse mais prático. :(
Mas bem, comentário à parte, não tem jeito, vou ter que terminar esse sistema inteiro em Delphi, e quem sabe até o fim eu acabe mudando minha opinião. Acho que o pior de tudo aqui é que o sistema já começou errado - usando os malditos componentes DB - e esse DataModule que para mim é algo estranhíssimo. Fico muito inseguro por ter que utilizar componentes que façam para mim a comunicação entre o banco de dados e o formulário - pessoalmente, prefiro fazer tudo pelo código, acho que oferece maior controle. Até porque sempre achei que componentes do tipo DB em qualquer linguagem, não são uma forma muito profissional de trabalhar.
Enfim, esse projeto em que estou trabalhando é para a faculdade e é um ´esqueleto´ semi-pronto pelo professor e temos que trabalhar em cima disso.
Olha só abaixo o que eu tentei (e nada funcionou):
DadosSistema.IQryPapeis.ParamByName(´PapEnv´).AsString := tPapEnv;
DadosSistema.IQryPapeis.FieldByName(´PapEnv´).AsString := tPapEnv;
DadosSistema.IQryPapeisPAPENV.AsString := tPapEnv;
Não é mole não!!!
Obrigado pela resposta, mas não deu certo. Quando eu tento passar pela propriedade ParamByName ele diz que o campo não existe. Se eu substituíla por FieldByName não dá erro, mas também não faz nada: simplesmente coloca um caractere nulo dentro do campo.
Cara, estou frustradíssimo com o Delphi, parece que nada funciona direito e demanda-se muito esforço e dezenas de tentativas até que alguma coisa dê certo, e está sendo realmente um pesadelo para mim trabalhar nele, pois pensei que fosse mais prático. :(
Mas bem, comentário à parte, não tem jeito, vou ter que terminar esse sistema inteiro em Delphi, e quem sabe até o fim eu acabe mudando minha opinião. Acho que o pior de tudo aqui é que o sistema já começou errado - usando os malditos componentes DB - e esse DataModule que para mim é algo estranhíssimo. Fico muito inseguro por ter que utilizar componentes que façam para mim a comunicação entre o banco de dados e o formulário - pessoalmente, prefiro fazer tudo pelo código, acho que oferece maior controle. Até porque sempre achei que componentes do tipo DB em qualquer linguagem, não são uma forma muito profissional de trabalhar.
Enfim, esse projeto em que estou trabalhando é para a faculdade e é um ´esqueleto´ semi-pronto pelo professor e temos que trabalhar em cima disso.
Olha só abaixo o que eu tentei (e nada funcionou):
DadosSistema.IQryPapeis.ParamByName(´PapEnv´).AsString := tPapEnv;
DadosSistema.IQryPapeis.FieldByName(´PapEnv´).AsString := tPapEnv;
DadosSistema.IQryPapeisPAPENV.AsString := tPapEnv;
Não é mole não!!!
GOSTEI 0
Marcelo Saviski
01/04/2004
nome do parametro é [u:1174ae1e3b][b:1174ae1e3b]t[/b:1174ae1e3b]PapEnv [/u:1174ae1e3b]ou [u:1174ae1e3b]PapEnv[/u:1174ae1e3b]?
GOSTEI 0