Ir para conteúdo

POWERED BY:

Arquivado

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

Carcleo

Um problema um tanto complicado

Recommended Posts

estava usado o compmnente table num cadastro de pedidos, e resolvi trocar o table pelo componente zquery.

Na migração, foi tudo bem porem, quando abro o formulario, da uma mensagen de "sql error: query was empty".

mas não consigo matar esse erro. obs: o codigo compila certinho.

segue o codigo que estou usando. se alguem puder me ajudar, muito obrigado

 

unit CadPedidos;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, ZDataset, DB, ZAbstractRODataset, ZAbstractDataset,  ZAbstractTable, Grids, DBGrids, StdCtrls, Buttons, DBCtrls, Mask,  ExtCtrls;type  TCPedidos = class(TForm)	PanelDados: TPanel;	LabelCodigoPedido: TLabel;	LabelCondicaoPagamento: TLabel;	LabelCodigoCliente: TLabel;	LabelLocalFatura: TLabel;	LabelLocalCobranca: TLabel;	LabelLocalEntrega: TLabel;	LabelCPF_CNPJ: TLabel;	LabelCEP: TLabel;	LabelDataCadastro: TLabel;	LabelTotalPedido: TLabel;	DBEditCodigoPedido: TDBEdit;	DBEditCondicaoPagamento: TDBEdit;	DBEditCodigoCliente: TDBEdit;	DBEditLocalFatura: TDBEdit;	DBEditLocalCobranca: TDBEdit;	DBEditLocalEntrega: TDBEdit;	DBEditCPF_CNPJ: TDBEdit;	DBEditCEP: TDBEdit;	DBEditDataCadastro: TDBEdit;	StaticTextTotal: TStaticText;	PanelBotoes: TPanel;	SpdBtnAlterar: TSpeedButton;	SpdBtnIncluir: TSpeedButton;	SpdBtnProcurar: TSpeedButton;	SpdBtnCancelar: TSpeedButton;	SpdBtnGravar: TSpeedButton;	SpdBtnExcluir: TSpeedButton;	DBNavigatorPedidos: TDBNavigator;	BitBtnFechar: TBitBtn;	Button1: TButton;	DBGridItens: TDBGrid;	DSPedidos: TDataSource;	DSItens: TDataSource;	QryClientes2: TZQuery;	QryClientes2CodigoCliente: TIntegerField;	QryClientes2Nome: TStringField;	QryClientes2Tipo: TStringField;	QryClientes2Endereco: TStringField;	QryClientes2Email: TStringField;	QryClientes2Bairro: TStringField;	QryClientes2Cidade: TStringField;	QryClientes2Estado: TStringField;	QryClientes2Telefone: TStringField;	QryClientes2CPF_CNPJ: TStringField;	QryClientes2DataCadastro: TDateField;	DSClientes: TDataSource;	QryPedidos: TZQuery;	QryItens: TZQuery;	QryClientes: TZQuery;	QryProdutos: TZQuery;	QryPedidosCodigoPedido: TIntegerField;	QryPedidosCondicaoPgto: TStringField;	QryPedidosCodigoCliente: TIntegerField;	QryPedidosNomeCli: TStringField;	QryPedidosLocalFatura: TStringField;	QryPedidosLocalCobranca: TStringField;	QryPedidosLocalEntrega: TStringField;	QryPedidosCPF_CNPJ: TStringField;	QryPedidosCEP: TStringField;	QryPedidosDataCadastro: TDateField;	QryPedidosNomeCliente: TStringField;	Label1: TLabel;	DBLookupComboBoxNomeCliente: TDBLookupComboBox;	QryItensItem: TIntegerField;	QryItensNumeroPedido: TIntegerField;	QryItensCodigoProduto: TIntegerField;	QryItensQuantidade: TIntegerField;	QryItensPrecoUni: TIntegerField;	QryProdutosCodigoProduto: TIntegerField;	QryProdutosDescricao: TStringField;	QryProdutosPrecoUni: TIntegerField;	QryClientesCodigoCliente: TIntegerField;	QryClientesDataCadastro: TDateField;	QryClientesTipo: TStringField;	QryClientesCPF_CNPJ: TStringField;	QryClientesNome: TStringField;	QryClientesEndereco: TStringField;	QryClientesBairro: TStringField;	QryClientesCidade: TStringField;	QryClientesEstado: TStringField;	QryClientesTelefone: TStringField;	QryClientesEmail: TStringField;	QryItensTotal: TCurrencyField;	procedure FormClose(Sender: TObject; var Action: TCloseAction);	procedure FormCreate(Sender: TObject);	procedure FormDestroy(Sender: TObject);	procedure QryPedidosNewRecord(DataSet: TDataSet);	procedure QryItensNewRecord(DataSet: TDataSet);	procedure QryItensCalcFields(DataSet: TDataSet);	procedure QryItensBeforeInsert(DataSet: TDataSet);	procedure QryItensBeforePost(DataSet: TDataSet);	procedure DBGridItensKeyDown(Sender: TObject; var Key: Word;	  Shift: TShiftState);	procedure QryItensCodigoProdutoValidate(Sender: TField);	procedure QryPedidosDataCadastroSetText(Sender: TField;	  const Text: String);	procedure SpdBtnIncluirClick(Sender: TObject);	procedure SpdBtnAlterarClick(Sender: TObject);	procedure SpdBtnExcluirClick(Sender: TObject);	procedure SpdBtnGravarClick(Sender: TObject);	procedure SpdBtnCancelarClick(Sender: TObject);	procedure SpdBtnProcurarClick(Sender: TObject);	procedure DBLookupComboBoxNomeClienteClick(Sender: TObject);  private   { Private declarations }	procedure AtivarControles(Ativar: Boolean);	procedure RecalculaPedido;  public	{ Public declarations }  end;var  CPedidos: TCPedidos;implementationuses dmsane, ListaPedidos; //RelatorioPedidos;{$R *.dfm}procedure TCPedidos.FormClose(Sender: TObject; var Action: TCloseAction);begin  Action:= cafree; // remove o form da memória  CPedidos := NIL; // informa que foi destruído (não criado)end;procedure TCPedidos.FormCreate(Sender: TObject);begin  QryProdutos.Open;  QryClientes.Open;  QryPedidos.Open;  QryItens.Open;end;procedure TCPedidos.FormDestroy(Sender: TObject);begin  QryProdutos.Close;  QryClientes.Close;  QryPedidos.Close;  QryItens.Close;end;procedure TCPedidos.QryPedidosNewRecord(DataSet: TDataSet);beginQryPedidosDataCadastro.AsDateTime := Date; //inicia com a data atualend;procedure TCPedidos.AtivarControles(Ativar: Boolean);begin	PanelDados.Enabled := Ativar;	DBNavigatorPedidos.Enabled := (not Ativar);	DBGridItens.ReadOnly := (not Ativar);	SpdBtnIncluir.Enabled := (not Ativar);	SpdBtnAlterar.Enabled := (not Ativar);	SpdBtnExcluir.Enabled := (not Ativar);	SpdBtnGravar.Enabled := Ativar;	SpdBtnCancelar.Enabled := Ativar;	SpdBtnProcurar.Enabled := (not Ativar);end;procedure TCPedidos.RecalculaPedido;var	TmpQry:TZQuery;	Total:Currency; // armazena valores do tipo moedabegin	// cria um objeto Qry via codificação	TmpQry := TZQuery.Create(Application);	try		// define DatabaseName e QryName via codificação		TmpQry.Connection := QryItens.Connection;		TmpQry.Name := QryItens.Name;		TmpQry.Open;		TmpQry.FindField(QryPedidosCodigoPedido.AsString);		Total := 0; // inicializa a variavel totalizadora		while (not TmpQry.Eof) and		   (TmpQry.FieldByName('NumeroPedido').AsInteger = QryPedidosCodigoPedido.AsInteger) do		 begin			 // Acumula o Total da linha			 Total := Total + (TmpQry.FieldByName('PrecoUni').AsCurrency * TmpQry.FieldByName('Quantidade').AsFloat);			 TmpQry.Next; // próximo registro		 end;	 finally		 TmpQry.Close; // fecha a tabela		 TmpQry.Free; // libera objeto da memória	 end;	 StaticTextTotal.Caption := FormatCurr('###,###,##0.00', Total); end;procedure TCPedidos.QryItensCalcFields(DataSet: TDataSet);beginif (QryItensQuantidade.AsFloat > 0) and	   (QryItensPrecoUni.AsCurrency > 0) then		QryItensTotal.AsCurrency := QryItensPrecoUni.AsCurrency * QryItensQuantidade.AsFloat;		RecalculaPedido; // recalcula e exibe novamenteend;procedure TCPedidos.QryItensNewRecord(DataSet: TDataSet);beginQryItensQuantidade.AsFloat := 1;DBGridItens.SelectedIndex := 0; //códigoend;procedure TCPedidos.QryItensBeforeInsert(DataSet: TDataSet);beginif QryPedidosCodigoPedido.AsString = '' then	begin		if QryPedidos.State = dsInsert then		begin			// grava para salvar o número do pedido na tabela pai			QryPedidos.Post;			// ativa a alteração novamente			QryPedidos.Edit;		end;	end;end;procedure TCPedidos.QryItensBeforePost(DataSet: TDataSet);begin if QryItensNumeroPedido.AsString = '' then		QryItensNumeroPedido.AsInteger := QryPedidosCodigoPedido.AsInteger;	if QryItensCodigoProduto.AsString = '' then	begin		DBGridItens.SelectedIndex := 0; // seleciona a coluna código		ShowMessage('Código do produto deve ser informado!');		Abort; // interrompe a gravação	end;	if QryItensQuantidade.AsFloat <= 0 then	begin		DBGridItens.SelectedIndex := 2; // seleciona coluna quantidade		ShowMessage('Código do produto deve ser informado!');		Abort; // interrompe a gravação	end;end;procedure TCPedidos.DBGridItensKeyDown(Sender: TObject; var Key: Word;  Shift: TShiftState);begin// muda para a próxima coluna se pressionar Enterif Key = VK_RETURN then // pressionou ENTERbegin	case DBGridItens.SelectedIndex of		0: DBGridItens.SelectedIndex := 2; //quantidade		1: DBGridItens.SelectedIndex := 2; //quantidade		2: DBGridItens.SelectedIndex := 3; //Preco	else		DBGridItens.SelectedIndex := 0; //código		QryItens.Next;		if QryItens.Eof then			QryItens.Append;	end; end;end;procedure TCPedidos.QryItensCodigoProdutoValidate(Sender: TField);beginif QryItensCodigoProduto.AsString <> '' thenbeginif QryItensCodigoProduto.AsString <> '' then	QryItensPrecoUni.AsCurrency := QryProdutos.FieldByName('PrecoUni').AsCurrency	else	begin		ShowMessage('Código inválido');		Abort;	end;end;end;procedure TCPedidos.QryPedidosDataCadastroSetText(Sender: TField;  const Text: String);beginif Text = '  /  /	' then		Sender.Clear // apaga o campo data	else		// atribui a data digitada ao campo		try			Sender.AsString := Text;		except			ShowMessage('Data inválida!');		end;end;procedure TCPedidos.SpdBtnIncluirClick(Sender: TObject);begin	AtivarControles(True); // ativa os controles para digitação	QryPedidos.Append; // inclui um novo registro na tabela	DBLookupComboBoxNomeCliente.SetFocus;end;procedure TCPedidos.SpdBtnAlterarClick(Sender: TObject);begin  if QryPedidos.IsEmpty then	begin		// a tabela está vazia, então devemos incluir		SpdBtnIncluir.Click; // executa o click no botão		Exit; // retorna	end;	AtivarControles(True); // ativa os controles para digitação	QryPedidos.Edit; // permite alterar os dados	DBLookupComboBoxNomeCliente.SetFocus;end;procedure TCPedidos.SpdBtnExcluirClick(Sender: TObject);beginif Application.MessageBox('Deseja excluir este pedido?','Confirme',		MB_YESNO + MB_ICONQUESTION + MB_DEFBUTTON2) = IDNO then		Exit; // retorna (sem fazer nada)	// devemos excluir os itens primeiro, para não termos registros órfãos	try		QryItens.First; // posiciona no primeiro item		while not QryItens.Eof do // executa até o fim do arquivo		begin			QryItens.Delete; // exclui o item			QryItens.First;		end;		QryPedidos.Delete; // exclui o pedido	except		ShowMessage('Ocorreu um erro durante a exclusão do pedido');	end;end;procedure TCPedidos.SpdBtnGravarClick(Sender: TObject);beginif QryPedidosCodigoPedido.AsInteger <= 0 then	begin		ShowMessage('Digite o número do pedido!');		DBEditCodigoPedido.Enabled := true;		DBEditCodigoPedido.SetFocus;	end	else if QryPedidosDataCadastro.IsNull then	begin		ShowMessage('Digite a data do pedido!');		DBEditDataCadastro.SetFocus;	end	else if QryPedidosNomeCliente.AsString = '' then	begin		// procura pelo cliente usando o código		if QryPedidosNomeCliente.AsString <> '' then		begin			ShowMessage('Código de cliente inválido!');			DBEditCodigoCliente.SetFocus;		end		else		begin			QryPedidos.Post;			if QryItens.State in [dsInsert,dsEdit] then				QryItens.Post;			AtivarControles(False); // desativa os controles		end;	end	else	begin		ShowMessage('Digite o código do cliente!');		DBEditCodigoCliente.SetFocus;	end;	QryPedidos.Post;	if QryItens.State in [dsInsert,dsEdit] then		QryItens.Post;	AtivarControles(False); // desativa os controlesend;procedure TCPedidos.SpdBtnCancelarClick(Sender: TObject);begin	QryPedidos.Cancel; // cancela inclusão/alteração	AtivarControles(False); // desativa os controlesend;procedure TCPedidos.SpdBtnProcurarClick(Sender: TObject);begin  Application.CreateForm(TLPedidos, LPedidos);  LPedidos.Show;end;procedure TCPedidos.DBLookupComboBoxNomeClienteClick(Sender: TObject);begin  QryClientes2.Close;  QryClientes2.sql.Clear;  QryClientes2.SQL.Add('Select * from Clientes where Nome = '+''''+DBLookupComboBoxNomeCliente.Text+''''+'');  QryClientes2.Open;  QryClientes2.first;  while not QryClientes2.EOF do  begin	DBEditCodigoCliente.Text := QryClientes2.Fields[0].Value;	DBEditLocalCobranca.Text := QryClientes2.Fields[5].Value +', '+ QryClientes2.Fields[6].Value +' - ' + QryClientes2.Fields[7].Value +'/' +QryClientes2.Fields[8].Value;	DBEditCPF_CNPJ.Text := QryClientes2.Fields[3].Value;	QryClientes2.Next;  end;end;end.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia

 

Por acaso existe um sql inicial na query? você colocou um updatesql ligado à query?

o erro é de que não existe sql na hora de abrir a query.

 

experiemente verificar esse detalhe

 

falow

 

http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pois é, esse é o problema, tenho 5 querys no form todas com a instrução inicial "Select * from Tabela" e ta dando esse erro. QryProdutos QryClientes QryClientes2 QryPedidos. QryItensComo faço pra ver em, que linha da o erro se o programa não da erro na compilação???

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em algum momento você limpa o conteúdo da query e não adiciona nada? você ja tentou debugar até o ponto em que a query iria abrir e verificar o conteúdo do parametro SQL.Text.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe minha ignorancia mas, como faço uma debugação?Como faz isso: "debugar até o ponto em que a query iria abrir e verificar o conteúdo do parametro SQL.Text."?Obrigado pela paciencia.

Compartilhar este post


Link para o post
Compartilhar em outros sites

na linha que você executa o comando open da query, pressione F5, assim será colocado um breakpoint. depois rode o programa com F9 e na hora q foco for dado ao delphi, será o momento no qual seria aberto a query. ai você pressiona Ctrl+F7 e escreva: query.SQL.Txt e de enter, será exibido na mesma tela o conteudo da query. veja se está correto.falow

Compartilhar este post


Link para o post
Compartilhar em outros sites

QryProdutos.Sql = Undeclared identifier: 'QryProdutos'QryProdutos.Sql.text = Undeclared identifier: 'QryProdutos'QryPedidos.Sql = Undeclared identifier: 'QryProdutos'QryPedidos.Sql.text = Undeclared identifier: 'QryProdutos'QryItens.Sql = Undeclared identifier: 'QryProdutos'QryItens.Sql.text = Undeclared identifier: 'QryProdutos'QryClientes.Sql = Undeclared identifier: 'QryProdutos'QryClientes.Sql.text = Undeclared identifier: 'QryProdutos'O interessante é que num da erro de compilação nem nada e alem disse Pasme:Com o Delphi 7 aberto, quando abro o Form, ele mostra os dados da tabela(claro que só o primeiro né)

Compartilhar este post


Link para o post
Compartilhar em outros sites

q componente você ta usando?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando eu passei o esquema para você ver o conteudo do sql, substitua pela propriedade na qual você amazena o conteúdo do sql.falow

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na realidade, eu só troquei a ZeosTable pelo ZeosQuery e depois ta dando esse erro.Eu num to conseguindo achar onde essa query vazia esta no meu código.E mais, eu nunca debuguei um código, só faço F9(compilo), deu erro, corrigo.Se puder tirar essas dúvidas agradeço.Sou novato em Delphi.um abraço.Carlos Rocha

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu nao uso a biblioteca zeos... mas no componente da query, a propriedade na qual você escreve o comando sql tem q estar preenchido antes de abrir.. e é isso q eu quero q você verifiquefalow

Compartilhar este post


Link para o post
Compartilhar em outros sites

veja bem:Eu tenho:QryProdutosQryPedidosQryItensQryClientesCada qual possui a instrução SQL "Select * from Tabela""Select * from Produtos""Select * from Pedidos""Select * from Itens""Select * from Clientes"Interessante que com o Delphy aberto na edição do formulario, os dados do primeiro registro mostra normal.Inclusive todas as querys estão com a propriedade active: True

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola.

Essa é a parte do código que esta dando erro:

É aqui que a query ta voltando valor vazio e a Table retorna valor diferente de vazio.

 

procedure TCPedidos.RecalculaPedido;var	TmpQry:TZQuery;	Total:Currency; // armazena valores do tipo moedabegin	// cria um objeto Qry via codificação	TmpQry := TZQuery.Create(Application);	try		// define DatabaseName e QryName via codificação		TmpQry.Connection := QryItens.Connection;		TmpQry.Name := QryItens.Name;		TmpQry.Open;		TmpQry.FindField(QryPedidosCodigoPedido.AsString);		Total := 0; // inicializa a variavel totalizadora		while (not TmpQry.Eof) and (TmpQry.FieldByName('NumeroPedido').AsInteger = QryPedidosCodigoPedido.AsInteger) do		 begin			 // Acumula o Total da linha			 Total := Total + (TmpQry.FieldByName('PrecoUni').AsCurrency * TmpQry.FieldByName('Quantidade').AsFloat);			 TmpQry.Next; // próximo registro		 end;	 finally		 TmpQry.Close; // fecha a tabela		 TmpQry.Free; // libera objeto da memória	 end;	 StaticTextTotal.Caption := FormatCurr('###,###,##0.00', Total); end;

Quando era com Table(Codigo abaixo), num tava dando erro, depois que passei usar ZQuery ta dando o erro.

 

procedure TCPedidos.RecalculaPedido;var	TmpTable:TZTable;	Total:Currency; // armazena valores do tipo moedabegin	// cria um objeto Table via codificação	TmpTable := TZTable.Create(Application);	try		// define DatabaseName e TableName via codificação		TmpTable.Connection := TableItens.Connection;		TmpTable.TableName := TableItens.TableName;		TmpTable.Open;		TmpTable.FindField(TablePedidosCodigoPedido.AsString);		Total := 0; // inicializa a variavel totalizadora		while (not TmpTable.Eof) and		   (TmpTable.FieldByName('NumeroPedido').AsInteger = TablePedidosCodigoPedido.AsInteger) do		 begin			 // Acumula o Total da linha			 Total := Total + (TmpTable.FieldByName('PrecoUni').AsCurrency * TmpTable.FieldByName('Quantidade').AsFloat);			 TmpTable.Next; // próximo registro		 end;	 finally		 TmpTable.Close; // fecha a tabela		 TmpTable.Free; // libera objeto da memória	 end;	 StaticTextTotal.Caption := FormatCurr('###,###,##0.00', Total); end;
Onde sera que esta o erro????????

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.