Ir para conteúdo
Fórum Script Brasil
  • 0

[Resolvido] Arquivo .SQL e DBGRID


FFernando

Pergunta

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 FFernando
Link para o comentário
Compartilhar em outros sites

10 respostass a esta questão

Posts Recomendados

  • 0
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???

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 DBGrid

Com 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 consulta

Como 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 executado

Abraços

Editado por Micheus
Link para o comentário
Compartilhar em outros sites

  • 0

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 ?

Link para o comentário
Compartilhar em outros sites

  • 0
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:

Link para o comentário
Compartilhar em outros sites

  • 0
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

nã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.

Link para o comentário
Compartilhar em outros sites

  • 0

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;

Link para o comentário
Compartilhar em outros sites

  • 0

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 por Micheus
Link para o comentário
Compartilhar em outros sites

  • 0

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;

Link para o comentário
Compartilhar em outros sites

  • 0
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;

Link para o comentário
Compartilhar em outros sites

  • 0

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

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...