Fórum Abrir query sem registros, como? #226396

16/04/2004

0

Galera, quando eu quero abrir uma query sem registros para fazer alguma coisa com ela faço o seguinte:

[color=green:488446b4f1]qryMinhaQuery.Sql.Add(´SELECT * FROM TABELA WHERE [b:488446b4f1][/color:488446b4f1][color=red:488446b4f1]MEU_CAMPO_CHAVE = 0[/color:488446b4f1][color=green:488446b4f1][/b:488446b4f1]´); qryMinhaQuery.Open;[/color:488446b4f1]


ou seja, o campo chave nunca vai ser zero, pois é obrigatório. Isso fará com que a query se abra, mas não traga registros.

O meu problema é que eu escolho a tabela em runtime, e não tenho como saber qual o campo chave dela.

Existe outra maneira de fazer isso?


Adriano Santos

Adriano Santos

Responder

Posts

16/04/2004

Weber

Porque você quer abrir a Query vazia?


Responder

Gostei + 0

16/04/2004

Juliano.pezzini

SELECT * FROM TABELA WHERE 1 = 2


Responder

Gostei + 0

16/04/2004

Adriano Santos

Porque você quer abrir a Query vazia?


Porque eu vou fazer uma série de inserts, então a tabela é muito grande...
Já vai demorar para dar os inserts, que serão vários. E mais o tempo de abertura da query, ai me ****.

[b:3d0a21c1ce][color=red:3d0a21c1ce]Editado pelo Moderador (AZ) - Uso indevido de palavrão.[/color:3d0a21c1ce][/b:3d0a21c1ce]


Responder

Gostei + 0

16/04/2004

Lucas Silva

qryMinhaQuery.Sql.Add(´SELECT * FROM TABELA WHERE MEU_CAMPO_CHAVE IS NULL´); 
qryMinhaQuery.Open;



Responder

Gostei + 0

16/04/2004

Weber

Não entendo o motivo de abrir a query para pode fazer um insert

Basta fazer o insert na mão e pronto

Query1.Add(Insert into Tabela (campo1,campo2) values (valor1,valor2));
Query1.ExecSQL;



Responder

Gostei + 0

16/04/2004

Maxwell_monteiro

Sem contar que sua suposicao esta errada pois mesmo executando uma sql que nao traga resultados o seu SGDB vai procurar por toda sua tabela! ou seja achando ou nao resultados o SGDB tem o mesmo trabalho e gasta o mesmo tempo! o unico ganho que vc tem abrindo uma query vazia é ganho de memória!


Responder

Gostei + 0

16/04/2004

Adriano Santos

[quote:3a43654213=´Lucas Alves Silva´]
qryMinhaQuery.Sql.Add(´SELECT * FROM TABELA WHERE MEU_CAMPO_CHAVE IS NULL´); 
qryMinhaQuery.Open;
[/quote:3a43654213]

Deste jeito não adianta, eu não sei o campo chave em runtime


Responder

Gostei + 0

16/04/2004

Adriano Santos

Não entendo o motivo de abrir a query para pode fazer um insert Basta fazer o insert na mão e pronto
Query1.Add(Insert into Tabela (campo1,campo2) values (valor1,valor2));
Query1.ExecSQL;


Eu vou usar objeto UpdateSql. E o comando insert é dinâmico, gerado pelo sistema.

Na realidade o que eu estou fazendo é uma ferramenta que vai transportar dados de uma ou mais tabelas de um banco de dados e passar para outro banco de dados.
Ou seja, o usuário (técnico) vai escolher o banco origem e o destino. Depois ele escolhe as tabelas que devem ser copiadas.

Até ai tudo beleza. Me deparei com o problema dos campos blob, que podem, no meu caso, conter arquivos de foto ou texto. Eu gero a Insert em runtime mais ou menos assim:

INSERT INTO TABELA (C1,C2,C3...C10) VALUES (:C1,:C2,:C3...:C10)

de acordo com a quantidade de campos de cada tabela.

Dai eu tenho um loop nos registros da tabela origem e um loop nos campos:

while not Origem.EOF do 
begin
  for I := 0 to QtdeDeCampos do
  begin
    case Origem.Fields[I].DataType of
      ftString:
        Destino.ParamByName(NomeDoCampo).AsString:=
        Origem.FieldByName(NomeDoCampo).AsString;
      .......
      ftBlog,ftMemo:       
        Destino.ParamByName(NomeDoCampo).Value:=
        Origem.FieldByName(NomeDoCampo).Value;
    end;
  end;
  try
    Destino.ExecSql;
  except
  end;
end;


Notem o [color=red:adb2260324]parambyname[/color:adb2260324]

Mas, quando o campo é blob da erro
[color=red:adb2260324]Dynamic SQL -303
Diz que o campo não pode ser movido desta forma.[/color:adb2260324]

...então tive que mudar o algoritimo para fazer a inserção através de obejto UpdateSql, só que me deparei com a demora.

Se tiverem uma opção melhor ou me expilcar porque não consigo passar para um parâmetro um campo blob, já me ajuda.

valeu galera.


Responder

Gostei + 0

16/04/2004

Adriano Santos

Sem contar que sua suposicao esta errada pois mesmo executando uma sql que nao traga resultados o seu SGDB vai procurar por toda sua tabela! ou seja achando ou nao resultados o SGDB tem o mesmo trabalho e gasta o mesmo tempo! o unico ganho que vc tem abrindo uma query vazia é ganho de memória!



Putz Maxwell_Monteiro, você tem razão...o tempo é o mesmo...não adianta nada, mas pelo menos a query vem vazia.... :lol:


Responder

Gostei + 0

23/04/2004

Paulo_amorim

SELECT * FROM TABELA WHERE 1 = 2


Olá
Deixe teu campo chave de lado

O importante é a query ficar vazia, portanto use o comando descrito pelo juliano

where 1=2

esse tipo de condição garante queries vazias, as quais são SIM de grande valia em alguns casos, como pegar campos de tableas, etc.

Até+


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar