FFernando Postado Agosto 14, 2008 Denunciar Share Postado Agosto 14, 2008 (editado) Bom dia galera,Sou novo aki no forum e iniciante em delphi..Estou com uma extrema dificuldade em um projeto.. :angry: Meu problema é o seguinte:Tenho 1 edit.text que receberá um arquivo, por exemplo:Consulta.SQLdentro dessa consulta tenho um select:Select * fromfuncionarioswherecodigo > 01eis o problema, como que faço p LER este arquivo .SQL, fazer com que o sistema execute esta queryque esta dentro do arquivo e me traga o resultado dentro d um DBGRID???Valeu galera...abraços Editado Agosto 21, 2008 por FFernando Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Agosto 14, 2008 Denunciar Share Postado Agosto 14, 2008 (editado) eis o problema, como que faço p LER este arquivo .SQL, fazer com que o sistema execute esta queryque esta dentro do arquivo e me traga o resultado dentro d um DBGRID???como bom iniciante, parece que você não leu muito a respeito do uso dos componentes que lhe interessam. <_< Como é que as informações do banco de dados vão para um TDBGrid?- as informações do banco de dados são obtidas via dataset - como TTable ou TQuery (há outros);- a ligação entre o dataset e um dbgrid, é feitas através de um componente TDataSouce o qual tem a sua propriedade DataSet preenchida com o dataset em questão e seu nome selecionado na propriedade DataSource do TDBGrid. É uma ponte ou, como o nome diz, uma "fonte de dados".// isto foi como trazer os resultados para o DBGridCom isto, ao abrir (Open ou Active) o dataset, os dados são mostrados no DBGrid - Isto é parte da solução do seu problema. (ex. Query1.Open; ou Query1.Active := True;)// isto foi como fazer com que o sistema execute a consultaComo ler o arquivo que contém o SQL?- um componente tipo query, possui a propriedade SQL que é do tipo TStrings. Esta classe tem métodos para ler e escrever em arquivos (veja help). No seu caso, você usaria o método LoadFromFile(<nome do arquivo>). (ex. Query1.SQL.LoadFromFile(Edit1.Text);)// isto foi como LER um SQL para ser executadoAbraços Editado Agosto 14, 2008 por Micheus Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 FFernando Postado Agosto 14, 2008 Autor Denunciar Share Postado Agosto 14, 2008 Olá Obrigado Micheus, Consegui fazer e ficou desta forma: OracleDataSet1.SQL.LoadFromFile(Edit1.text); // OracleDataset1.SQL.Add(sBufferOrig); OracleDataSet1.Active:=true; OracleDataSet1.Open; Gauge1.MaxValue := DBGrid1.DataSource.DataSet.RecordCount; OracleDataSet1.First; if not OracleDataSet1.Eof then repeat Gauge1.Progress := Gauge1.Progress + 1; if Gauge1.Progress = Gauge1.MaxValue then begin ShowMessage('Processo Terminado!'); end; OracleDataSet1.Next; until OracleDataSet1.Eof;Agora estou tentando transportar os dados do dbgrid p um arquivo CSV, achei aki o forum mesmo uma exportação p excel, mas tem consultas que excedem o limite de 65000 linhas do excel e o programa acaba dando pau, você saberia algum outro jeito p ele exportar os dados do dbgrid separados por ponto e virgula ? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Agosto 14, 2008 Denunciar Share Postado Agosto 14, 2008 OracleDataSet1.Active:=true; OracleDataSet1.Open;FFernando, tenha atenção. Tente entender o que está fazendo.Eu postei: "... (ex. Query1.Open; ou Query1.Active := True;)"Isto que você fez é redundância. ;)Agora estou tentando transportar os dados do dbgrid p um arquivo CSV, achei aki o forum mesmo uma exportação p excel, mas tem consultas que excedem o limite de 65000 linhas do excel e o programa acaba dando pau, você saberia algum outro jeito p ele exportar os dados do dbgrid separados por ponto e virgula ?mas usar "," ou ";" iria mudar alguma coisa? O problema não é a quantidade de linhas? :huh: Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 FFernando Postado Agosto 14, 2008 Autor Denunciar Share Postado Agosto 14, 2008 Ahh sim... :huh: sorry..O arquivo por padrão tem que ser formatado assim, pois será enviado a um cliente, que fará a inserção no banco de dados dele.Eu preciso pegar os resultados do dbgrid e fazer a sepação das colunas por ponto e virgula, salvar em um arquivo .CSV Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Agosto 14, 2008 Denunciar Share Postado Agosto 14, 2008 O arquivo por padrão tem que ser formatado assim, pois será enviado a um cliente, que fará a inserção no banco de dados dele.Eu preciso pegar os resultados do dbgrid e fazer a sepação das colunas por ponto e virgula, salvar em um arquivo .CSVnão sei qual das dicas você pegou, mas no geral você estará gravando o valor do campo seguido por ";" (caso a dica cite ",").Quanto a extrapolar o número de linhas no excel, se é que é para ser aberto por ele, experimente criar novas worksheet antes de atingir o limite de linhas. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 FFernando Postado Agosto 14, 2008 Autor Denunciar Share Postado Agosto 14, 2008 vou procurar fazer do jeito que você disse, eu estou usando esse codigo aki:var linha, coluna : integer;var planilha : variant;var valorcampo : string;begin OracleDataSet1.CachedUpdates := true; planilha:= CreateoleObject('Excel.Application'); planilha.WorkBooks.add(1); planilha.caption := 'Exportando dados do dbGrid para o Excel'; planilha.visible := true; OracleDataSet1.First; for linha := 0 to OracleDataSet1.RecordCount - 1 do begin for coluna := 1 to OracleDataSet1.FieldCount do begin valorcampo := OracleDataSet1.Fields[coluna - 1].AsString; planilha.cells[linha + 2,coluna] := valorCampo; end; OracleDataSet1.Next; end; for coluna := 1 to OracleDataSet1.FieldCount do begin valorcampo := OracleDataSet1.Fields[coluna - 1].DisplayLabel; planilha.cells[1,coluna] := valorcampo; end; planilha.columns.Autofit;end; Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Agosto 15, 2008 Denunciar Share Postado Agosto 15, 2008 (editado) FFernando, pelo seu códio, você está colocando os dados direto no Excel.Então, onde entra a questão do CSV? :blink:Obs: quando postar código, utilize a tag <código> [/ CODE] (sem este espaço que deixei após a "/" Editado Agosto 15, 2008 por Micheus Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 FFernando Postado Agosto 19, 2008 Autor Denunciar Share Postado Agosto 19, 2008 Oi Micheus, O arquivo csv eu converteria após os dados estando no excel, mas vi q não funcionaria..estou transferindo para txt mesmo.estou com problema nessa parte do código, onde consigo apenas pegar o ULTIMO registro e ele grava uma coluna abaixo da outra. :wacko: for linha := 0 to OracleDataSet1.RecordCount - 1 do begin for coluna := 0 to OracleDataSet1.FieldCount -1 do begin valorcampo := OracleDataSet1.Fields[coluna].AsString; StrToCopy := valorcampo; WriteLn(txtSAIDA, StrToCopy + ';'); end; end; Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Agosto 20, 2008 Denunciar Share Postado Agosto 20, 2008 estou com problema nessa parte do código, onde consigo apenas pegar o ULTIMO registro e ele grava uma coluna abaixo da outra. :wacko:FFernando, isto ocorre porque você está usando WriteLN para cada coluna. Se você der uma espiada no help, deverá perceber que este LN a mais, significa que será gerado um avanço de linha. Logo, você deve usar apenas Write. Mas não pode esquecer de que tem que avançar a linha após gravado a última coluna. Veja sugestão:... OracleDataSet1.First; // posiciona no início do seu dataset while not OracleDataSet1.EOF do // percorre enquanto não chegar aofim begin for coluna := 0 to OracleDataSet1.FieldCount -1 do begin valorcampo := OracleDataSet1.Fields[coluna].AsString; if Coluna < (OracleDataSet1.FieldCount -1) then Write(txtSAIDA, StrToCopy + ';') else // última coluna - avança linha e não põe o delimitador WriteLn(txtSAIDA, StrToCopy); end; OracleDataSet1.Next; // próximo registro end; Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 FFernando Postado Agosto 21, 2008 Autor Denunciar Share Postado Agosto 21, 2008 Oi Micheus, Obrigado pela ajuda, tive que fazer uma pequena alteração: while not OracleDataSet1.EOF do // percorre enquanto não chegar aofim begin for coluna := 0 to OracleDataSet1.FieldCount -1 do begin valorcampo := OracleDataSet1.Fields[coluna].AsString; if Coluna < (OracleDataSet1.FieldCount -1) then Write(txtSAIDA, valorcampo + ';') else // última coluna - avança linha e não põe o delimitador WriteLn(txtSAIDA, valorcampo + ';'); end; OracleDataSet1.Next; // próximo registro end;Funcionou perfeitamente, obrigado cara!abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
FFernando
Bom dia galera,
Sou novo aki no forum e iniciante em delphi..
Estou com uma extrema dificuldade em um projeto.. :angry:
Meu problema é o seguinte:
Tenho 1 edit.text que receberá um arquivo, por exemplo:
Consulta.SQL
dentro dessa consulta tenho um select:
Select * from
funcionarios
where
codigo > 01
eis o problema, como que faço p LER este arquivo .SQL, fazer com que o sistema execute esta query
que esta dentro do arquivo e me traga o resultado dentro d um DBGRID???
Valeu galera...
abraços
Editado por FFernandoLink para o comentário
Compartilhar em outros sites
10 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.