Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Carcleo

Qual sera agora o erro?

Recommended Posts

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 Data
Olhem 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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.