Carcleo 4 Denunciar post Postado Março 10, 2007 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
thalesoli 0 Denunciar post Postado Março 11, 2007 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
Carcleo 4 Denunciar post Postado Março 11, 2007 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
thalesoli 0 Denunciar post Postado Março 11, 2007 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
Carcleo 4 Denunciar post Postado Março 11, 2007 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
thalesoli 0 Denunciar post Postado Março 11, 2007 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
Carcleo 4 Denunciar post Postado Março 11, 2007 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
thalesoli 0 Denunciar post Postado Março 12, 2007 q componente você ta usando? Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Março 12, 2007 ZeosLib Compartilhar este post Link para o post Compartilhar em outros sites
thalesoli 0 Denunciar post Postado Março 12, 2007 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
Carcleo 4 Denunciar post Postado Março 12, 2007 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
thalesoli 0 Denunciar post Postado Março 12, 2007 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
Carcleo 4 Denunciar post Postado Março 12, 2007 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
Carcleo 4 Denunciar post Postado Março 13, 2007 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