Abrir query sem registros, como?
Galera, quando eu quero abrir uma query sem registros para fazer alguma coisa com ela faço o seguinte:
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?
[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
Curtidas 0
Respostas
Weber
16/04/2004
Porque você quer abrir a Query vazia?
GOSTEI 0
Juliano.pezzini
16/04/2004
SELECT * FROM TABELA WHERE 1 = 2
GOSTEI 0
Adriano Santos
16/04/2004
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]
GOSTEI 0
Lucas Silva
16/04/2004
qryMinhaQuery.Sql.Add(´SELECT * FROM TABELA WHERE MEU_CAMPO_CHAVE IS NULL´); qryMinhaQuery.Open;
GOSTEI 0
Weber
16/04/2004
Não entendo o motivo de abrir a query para pode fazer um insert
Basta fazer o insert na mão e pronto
Basta fazer o insert na mão e pronto
Query1.Add(Insert into Tabela (campo1,campo2) values (valor1,valor2)); Query1.ExecSQL;
GOSTEI 0
Maxwell_monteiro
16/04/2004
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!
GOSTEI 0
Adriano Santos
16/04/2004
[quote:3a43654213=´Lucas Alves Silva´][/quote:3a43654213]
Deste jeito não adianta, eu não sei o campo chave em runtime
qryMinhaQuery.Sql.Add(´SELECT * FROM TABELA WHERE MEU_CAMPO_CHAVE IS NULL´); qryMinhaQuery.Open;
Deste jeito não adianta, eu não sei o campo chave em runtime
GOSTEI 0
Adriano Santos
16/04/2004
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.
GOSTEI 0
Adriano Santos
16/04/2004
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:
GOSTEI 0
Paulo_amorim
16/04/2004
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é+
GOSTEI 0