Carcleo 4 Denunciar post Postado Setembro 15, 2005 Ola Pessoal, to pelejandfo pra apreder a trabalhar com zeos e mysql e quero agradecer a paciencia de voces. Minha duvida agora é a seguinte: Enxuquei meu código. E agora tenho dois butoons, um atualizar com um update um cadastrar com um insert mas apois clikar em um ou no outro botão, ta dando a seguinte mensagem. Can not Retrieve ResultSet DataOlhem meu código: unit cadastros;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, DBCtrls, DB, ZAbstractRODataset, ZAbstractDataset, ZDataset, ZConnection, Buttons, Grids, DBGrids;type TFormCadastros = class(TForm) ZConnectionImobiliaria: TZConnection; ZQueryClientes: TZQuery; DataSource1: TDataSource; ComboBoxNome: TComboBox; ComboBoxCpfCnpj: TComboBox; ButtonSalvar: TButton; ComboBoxTelefone: TComboBox; ComboBoxEndereco: TComboBox; ComboBoxCidade: TComboBox; ComboBoxNacimento: TComboBox; LabelNome: TLabel; LabelCpfCnpj: TLabel; LabelTelefone: TLabel; LabelEndereco: TLabel; LabelCidade: TLabel; LabelNacimento: TLabel; ZQueryClientesCliId: TLargeintField; ZQueryClientesCliNome: TStringField; ZQueryClientesCliCpfCnpj: TStringField; ZQueryClientesCliTelefone: TIntegerField; ZQueryClientesCliEndereco: TStringField; ZQueryClientesCliCidade: TStringField; ZQueryClientesCliNacimento: TStringField; ButtonAtualizar: TButton; ComboBoxID: TComboBox; LabelID: TLabel; ZQueryClientes2: TZQuery; procedure ComboBoxNomeChange(Sender: TObject); procedure ButtonSalvarClick(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure ButtonAtualizarClick(Sender: TObject); private { Private declarations } public { Public declarations } end;var FormCadastros: TFormCadastros;implementation{$R *.dfm}procedure TFormCadastros.FormClose(Sender: TObject; var Action: TCloseAction);beginAction := caFree; // remove o form da memóriaFormCadastros := NIL; // informa que foi destruído (não criado)end;procedure TFormCadastros.ComboBoxNomeChange(Sender: TObject);beginZQueryClientes.Open;ZQueryClientes.first;while not ZQueryClientes.EOF dobeginComboBoxNome.Items.Add(VarToStr(ZQueryClientes.Fields[1].value));ZQueryClientes.Next;end;ZQueryClientes.LOCATE('CliNome',ComboBoxNome.Text,[loCaseInsensitive, loPartialKey]);ComboBoxID.TEXT:=ZQueryClientes.fieldbyname('CliID').Value;ComboBoxCPFCNPJ.TEXT:=ZQueryClientes.fieldbyname('CliCpfCnpj').Value;ComboBoxTelefone.TEXT:=ZQueryClientes.fieldbyname('CliTelefone').Value;ComboBoxEndereco.TEXT:=ZQueryClientes.fieldbyname('CliEndereco').AsString;ComboBoxCidade.TEXT:=ZQueryClientes.fieldbyname('CliCidade').AsString;ComboBoxNacimento.TEXT:=ZQueryClientes.fieldbyname('CliNacimento').Value;ZQueryClientes.Next;end;procedure TFormCadastros.ButtonSalvarClick(Sender: TObject);beginZQueryClientes.Active := False;ZQueryClientes.SQL.Clear;ZQueryClientes.SQL.Add('Insert into Clientes(CliNome,CliCpfCnpj,CliTelefone,CliEndereco,CliCidade,CliNacimento) Values('+''''+ComboBoxNome.Text+''''+','+''''+ComboBoxCpfCnpj.Text+''''+','+''''+ComboBoxTelefone.Text+''''+','+''''+ComboBoxEndereco.Text+''''+','+''''+ComboBoxCidade.Text+''''+','+''''+ComboBoxNacimento.Text+''''+')');ZQueryClientes.Open;ZQueryClientes.ExecSQL;ZQueryClientes.Append; ShowMessage('Ok!'); ComboBoxNome.SetFocus; // posiciona na caixa de texto novamente Exit; // retornaend;procedure TFormCadastros.ButtonAtualizarClick(Sender: TObject);beginZQueryClientes.Active := False;ZQueryClientes.SQL.Clear;ZQueryClientes.SQL.Add('Update Clientes set CliNome='+''''+ComboBoxNome.Text+''''+',CliCpfCnpj='+''''+ComboBoxCpfCnpj.Text+''''+',CliTelefone='+''''+ComboBoxTelefone.Text+''''+',CliEndereco='+''''+ComboBoxEndereco.Text+''''+',CliCidade='+''''+ComboBoxCidade.Text+''''+',CliNacimento='+''''+ComboBoxNacimento.Text+''''+' where CliId='+''''+ComboBoxId.Text+''''+'');ZQueryClientes.Open;ZQueryClientes.ExecSQL;ZQueryClientes.Append; ShowMessage('Ok!'); ComboBoxNome.SetFocus; // posiciona na caixa de texto novamente Exit; // retornaend;end. Qual sera agora o erro? Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Setembro 16, 2005 O pessoal.Alguem por favor me da uma ajuda.Ou alguem me ajude a criar um pequeno script onde eu digito o nome e a cada letra digitada, é completado com o resto dos nomes e a partir daí, os outros campos se preenchem sózinhos buscando tipo o cpf, endereço... Compartilhar este post Link para o post Compartilhar em outros sites
Flávio Krânio 0 Denunciar post Postado Maio 20, 2009 Normalmente ocorre quando trata-se de um select dentro de outro select, "subconsultas". E a subconsulta está trazendo mais de uma linha para o select principal. você pode ir eliminando as subconsultas até encontrar qual delas está dando erro. Ao encontrar faça um teste e verifica o que pode ser feito para trazer apenas uma linha. Abç Compartilhar este post Link para o post Compartilhar em outros sites
Chrnos 30 Denunciar post Postado Maio 20, 2009 Olha, não usei até hoje este componente, mas acho que seu problema está na forma como está montando seu código... vamos tomar por exemplo seu botão salvar: procedure TFormCadastros.ButtonSalvarClick(Sender: TObject); begin ZQueryClientes.Active := False; ZQueryClientes.SQL.Clear; ZQueryClientes.SQL.Add('Insert into Clientes(CliNome,CliCpfCnpj,CliTelefone,CliEndereco,CliCidade,CliNacimento) Values('+''''+ComboBoxNome.Text+''''+','+''''+ComboBoxCpfCnpj.Text+''''+','+''''+ComboBoxTelefone.Text+''''+','+''''+ComboBoxEndereco.Text+''''+','+''''+ComboBoxCidade.Text+''''+','+''''+ComboBoxNacimento.Text+''''+')'); ZQueryClientes.Open; ZQueryClientes.ExecSQL; ZQueryClientes.Append; ShowMessage('Ok!'); ComboBoxNome.SetFocus; // posiciona na caixa de texto novamente Exit; // retorna end; Vejo alguns problemas aqui... a começar pela sua lógica neste botão... se eu entendi corretamente, você quer usar o ZQuery para dar um insert na sua tabela e carregar depois os dados novamente já com este novo registro, estou correto? Se estou correto, já posso dizer que seu código está totalmente equivocado em muitos pontos... 1º) Para fechar uma query o mais comum é usar o query.close em vez do active = false; 2º) Não se usa 3 os comandos open e append em querys com comandos insert, delete ou update... apenas o ExecSql é usado nestes casos. 3º) Sua lógica está errada... veja o que seu código faz: desativa a query, limpa a query, insere nela uma query de inserção de dados, executa esta query 3 vezes (open, execsql e append), mostra mensagem e tenta recarregar o combo com os valores... note que em nenhum momento você remonta seu select de dados inicial usado para carregar o combo após o insert, dai o seu erro. Logo, o mais correto seria algo assim: procedure TFormCadastros.ButtonSalvarClick(Sender: TObject); begin ZQueryClientes.Close; ZQueryClientes.SQL.Clear; ZQueryClientes.SQL.Add('Insert into Clientes(CliNome,CliCpfCnpj,CliTelefone,CliEndereco,CliCidade,CliNacimento) Values('+''''+ComboBoxNome.Text+''''+','+''''+ComboBoxCpfCnpj.Text+''''+','+''''+ComboBoxTelefone.Text+''''+','+''''+ComboBoxEndereco.Text+''''+','+''''+ComboBoxCidade.Text+''''+','+''''+ComboBoxNacimento.Text+''''+')'); ZQueryClientes.ExecSQL; ShowMessage('Ok!'); //Carregar os dados novamente na query ZQueryClientes.Close; ZQueryClientes.SQL.Clear; ZQueryClientes.SQL.Add('Select * from Clientes'); ZQueryClientes.Open; ComboBoxNome.SetFocus; // posiciona na caixa de texto novamente Exit; // retorna end; []'s Compartilhar este post Link para o post Compartilhar em outros sites