Como deletar vários registros ao mesmo tempo ?

Delphi

22/08/2005

Como deletar vários registros ao mesmo tempo? eu tenho um tabela onde os filtro são feitos po eliminação e é feito por código..vamos tupor que minha tabela tenha 5 ocorrencias com um determinado código ( código 10 por exemplo ) aí e listado somente os registros referente á ele..tem como deleter todos de uma vez ? flw..t+


Gigatel

Gigatel

Curtidas 0

Respostas

Rjun

Rjun

22/08/2005

Use uma instrução SQL.

DELETE FROM Tabela WHERE Codigo = 10



GOSTEI 0
Gigatel

Gigatel

22/08/2005

Use uma instrução SQL.
DELETE FROM Tabela WHERE Codigo = 10



Olha isso..esta é minha tabela..
DELETE FROM ORCAMENTO_OFIC_ELET_ITENS WHERE Codigo = 10


dá este erro..

[Error] Unit28.pas(444): ´(´ expected but identifier ´FROM´ found


GOSTEI 0
Rjun

Rjun

22/08/2005

Bom, algumas perguntas:

1) Que banco você esta usando?
2) Qual a tecnologia de acesso?
3) Onde você pos essa instrução SQL?


GOSTEI 0
Gigatel

Gigatel

22/08/2005

Bom, algumas perguntas: 1) Que banco você esta usando? 2) Qual a tecnologia de acesso? 3) Onde você pos essa instrução SQL?



1) uso interbase,
2) uso uma IBquery + IBUpdat + Datasouce
3) coloquei no botão..

desculpe num sou muito bom em sql..se vc pudesse me ajudar me mostrando o o código inteiro..

este é o nome da tabela..ORCAMENTO_OFIC_ELET_ITENS ...
este é o nome que coloquei na IBquery....BD_ORCA_ITENS....

Vlw...


GOSTEI 0
Rjun

Rjun

22/08/2005

Você deve colocar o código SQL no seu IBQuery. Nunca usei Interbase e nem o IBQuery. Mas acho que a ideia seria a mesma.

Crie uma Query. Vou chama-la de qryApaga. No botão, coloque o seguinte código:

qryApaga.SQL.Clear;
qryApaga.SQL.Add(´DELETE FROM ORCAMENTO_OFIC_ELET_ITENS  WHERE Codigo = ´ + IntToStr(Codigo));
qryApaga.ExecSql;


Assim, isso é uma idéia. Se alguem que manja de IB puder ajudar mais, então poste aí.


GOSTEI 0
Gigatel

Gigatel

22/08/2005

Você deve colocar o código SQL no seu IBQuery. Nunca usei Interbase e nem o IBQuery. Mas acho que a ideia seria a mesma. Crie uma Query. Vou chama-la de qryApaga. No botão, coloque o seguinte código:
qryApaga.SQL.Clear;
qryApaga.SQL.Add(´DELETE FROM ORCAMENTO_OFIC_ELET_ITENS  WHERE Codigo = ´ + IntToStr(Codigo));
qryApaga.ExecSql;
Assim, isso é uma idéia. Se alguem que manja de IB puder ajudar mais, então poste aí.



Montei o sódigo..


BD_ORCA_ITENS.SQL.Clear;
BD_ORCA_ITENS.SQL.Add(´DELETE FROM ORCAMENTO_OFIC_ELET_ITENS  WHERE Codigo = ´ + IntToStr(BD_ORCA_ITENSGS_OOEI_CODIGO));
BD_ORCA_ITENS.ExecSql;


está dando este erro....


[Error] Unit28.pas(445): There is no overloaded version of ´IntToStr´ that can be called with these arguments


GOSTEI 0
Gigatel

Gigatel

22/08/2005

O nome da Tabela é.. ORCAMENTO_OFIC_ELET_ITENS ..
O nome do componente ( ibquery )é.. BD_ORCA_ITENS ..
O nome do campo código é ... BD_ORCA_ITENSGS_OOEI_CODIGO ...

Só para eclarecimento..


GOSTEI 0
Rjun

Rjun

22/08/2005

Amigo

Você esta tentando passar um TField como parâmetro em IntToStr. Coloque BD_ORCA_ITENSGS_OOEI_CODIGO.Value.

Eu evito fazer o q vc fez. Prefiro utilizar FieldByName.

BD_ORCA_ITENS.SQL.Clear; 
BD_ORCA_ITENS.SQL.Add(´DELETE FROM ORCAMENTO_OFIC_ELET_ITENS  WHERE Codigo = ´ + IntToStr(BD_ORCA_ITENS.FieldByName(´GS_OOEI_CODIGO´).Value)); 
BD_ORCA_ITENS.ExecSql;



GOSTEI 0
Gigatel

Gigatel

22/08/2005

Amigo Você esta tentando passar um TField como parâmetro em IntToStr. Coloque BD_ORCA_ITENSGS_OOEI_CODIGO.Value. Eu evito fazer o q vc fez. Prefiro utilizar FieldByName.
BD_ORCA_ITENS.SQL.Clear; 
BD_ORCA_ITENS.SQL.Add(´DELETE FROM ORCAMENTO_OFIC_ELET_ITENS  WHERE Codigo = ´ + IntToStr(BD_ORCA_ITENS.FieldByName(´GS_OOEI_CODIGO´).Value)); 
BD_ORCA_ITENS.ExecSql;


o campo em questão estva errado...agora está o código com os campos certos...


BD_ORCA_ITENS.SQL.Clear;
BD_ORCA_ITENS.SQL.Add(´DELETE FROM ORCAMENTO_OFIC_ELET_ITENS  WHERE GS_OOEI_CODACES = ´ + IntToStr(BD_ORCA_ITENS.FieldByName(´GS_OOEI_CODACES´).Value));
BD_ORCA_ITENS.ExecSql;



Mas está dando este erro..

Project Teste.exe raised execption class EVariantTyeCastError..Não é possivel converter tipo de variant (null) em tipo (integer)...[/img]


GOSTEI 0
Imoreira

Imoreira

22/08/2005

BD_ORCA_ITENS.SQL.Clear;
BD_ORCA_ITENS.SQL.Add(´DELETE FROM ORCAMENTO_OFIC_ELET_ITENS WHERE GS_OOEI_CODACES = ´ + quotedstr(BD_ORCA_ITENS.FieldByName(´GS_OOEI_CODACES´).asString));
BD_ORCA_ITENS.ExecSql;


GOSTEI 0
Gigatel

Gigatel

22/08/2005

BD_ORCA_ITENS.SQL.Clear; BD_ORCA_ITENS.SQL.Add(´DELETE FROM ORCAMENTO_OFIC_ELET_ITENS WHERE GS_OOEI_CODACES = ´ + quotedstr(BD_ORCA_ITENS.FieldByName(´GS_OOEI_CODACES´).asString)); BD_ORCA_ITENS.ExecSql;


Tá complicado amigo...hehehehe..tem que rir pra naum chorar...agora deu este erro..

exception class EIBInterbaseError with message..erro de conversão da string..


GOSTEI 0
Gandalf.nho

Gandalf.nho

22/08/2005

Faça com parâmetros que é melhor:

BD_ORCA_ITENS.SQL.Clear; 
BD_ORCA_ITENS.SQL.Add(´DELETE FROM ORCAMENTO_OFIC_ELET_ITENS WHERE GS_OOEI_CODACES = :vGS_OOEI_CODACES´);
BD_ORCA_ITENS.ParamByName(´vGS_OOEI_CODACES´).AsInteger := BD_ORCA_ITENSGS_OOEI_CODACES.Value;
BD_ORCA_ITENS.ExecSql;



GOSTEI 0
Jujan

Jujan

22/08/2005

IBQuery1.close;
IBQuery1.sql.clear;
IBQuery1.sql.add(´delete from <nome_da_tabela>´);
IBQuery1.sql.add(´where <nome_do_campo> like´+QuotedStr(edit1.text));
try
IBQuery1.open;
except
end;


GOSTEI 0
Gigatel

Gigatel

22/08/2005

Faça com parâmetros que é melhor:
BD_ORCA_ITENS.SQL.Clear; 
BD_ORCA_ITENS.SQL.Add(´DELETE FROM ORCAMENTO_OFIC_ELET_ITENS WHERE GS_OOEI_CODACES = :vGS_OOEI_CODACES´);
BD_ORCA_ITENS.ParamByName(´vGS_OOEI_CODACES´).AsInteger := BD_ORCA_ITENSGS_OOEI_CODACES.Value;
BD_ORCA_ITENS.ExecSql;


Parece que está desligando a tabela e os ítens não apagam..más parou de dá erro...


GOSTEI 0
Gigatel

Gigatel

22/08/2005

IBQuery1.close; IBQuery1.sql.clear; IBQuery1.sql.add(´delete from <nome_da_tabela>´); IBQuery1.sql.add(´where <nome_do_campo> like´+QuotedStr(edit1.text)); try IBQuery1.open; except end;


Onde este edit1 entraria na minha função...


GOSTEI 0
Gigatel

Gigatel

22/08/2005

[quote:7ca492b924=´jujan´]IBQuery1.close; IBQuery1.sql.clear; IBQuery1.sql.add(´delete from <nome_da_tabela>´); IBQuery1.sql.add(´where <nome_do_campo> like´+QuotedStr(edit1.text)); try IBQuery1.open; except end;


Onde este edit1 entraria na minha função...[/quote:7ca492b924]



BD_ORCA_ITENS.close;
BD_ORCA_ITENS.sql.clear;
BD_ORCA_ITENS.sql.add(´delete from ORCAMENTO_OFIC_ELET_ITENS´);
BD_ORCA_ITENS.sql.add(´where GS_OOEI_CODACES like´+QuotedStr(edit4.text));
try 
BD_ORCA_ITENS.open;
except 
end;


eu coloco só para teste um edit4 para colocar o codigo (GS_OOEI_CODACES) manualmente....ele aparentemente até apaga más quando sai do programa e volta os dados não ficam apagado....


GOSTEI 0
Rjun

Rjun

22/08/2005

Em querys com Insert/Update/Delete não se utiliza o método OPEN. Você deve utilizar o método EXECSQL.

O exemplo da Gandalf.nho está perfeito.


GOSTEI 0
Gigatel

Gigatel

22/08/2005

Em querys com Insert/Update/Delete não se utiliza o método OPEN. Você deve utilizar o método EXECSQL. O exemplo da Gandalf.nho está perfeito.



De fato parece que está funcionando..más não deleta...e desliga o DBgrid..
O DBGrid na primeira coluna fica QnT-UNT-Descrição-Valor Unt- Valor Total.

Quando click no botão onde está a função, ele desabilita o dbgrid...doideira...


GOSTEI 0
Rjun

Rjun

22/08/2005

Você pode postar o trecho de código onde vc faz essa operação? Se puder, então coloque pra podermos dar uma olhada. Fica mais fácil assim.


GOSTEI 0
Gigatel

Gigatel

22/08/2005

Você pode postar o trecho de código onde vc faz essa operação? Se puder, então coloque pra podermos dar uma olhada. Fica mais fácil assim.


Na verdade é só isso aí mesmo... más deixa tentar explicar como funciona...Tenho um programa de Ordem de serviço....Tenho o cadastro de aparelhos onde alí entra todos os dados nescessários..Nesta OS exite 2 tabelas uma para o cadastro e outra para para o orçamento..as tabelas são relacionadas por códigos. Exemplo entrei com um novo registro este mesmo cria um código ( um auto incremento ). Tenho uma segunda tabela onde é recebido os ítens ou peças gastas neste Orçamento então o process é feito assim..

 _FormOSOR.BD_ORCA_ITENS.Insert;
_FormOSOR.BD_ORCA_ITENSGS_OOEI_CODACES.Value :=    _FormOSSaida.BD_OFC_ELEGS_OOE_CODIGO.value;
_FormOSOR.BD_ORCA_ITENS.Post;
_FormOSOR.BD_ORCA_ITENS.Close;
_FormOSOR.BD_ORCA_ITENS.SQL.Clear;
_FormOSOR.BD_ORCA_ITENS.SQL.Add(´select * from ORCAMENTO_OFIC_ELET_ITENS where GS_OOEI_CODACES=´+inttostr(E));
 _FormOSOR.BD_ORCA_ITENS.Open;
Close;




Até aí funciona...más na hora de dar baixa n OS e consequentimento os ítens é que está dando problema...pois estou dando baixa somente na os e os ítens continua na tabela .... quando vou dar baixa tem um filtro onde tenho que chamar um forma para os precedimentos finais...este é o código



procedure T_FormOSSaida.ToolButton8Click(Sender: TObject);
var
e:integer;
begin
  E:=_FormOSSaida.BD_OFC_ELEGS_OOE_CODIGO.Value;
  _FormOSSaidaB := T_FormOSSaidaB.Create(application);
  _FormOSSaidaB.BD_ORCA_ITENS.Close;
  _FormOSSaidaB.BD_ORCA_ITENS.SQL.Clear;
  _FormOSSaidaB.BD_ORCA_ITENS.SQL.Add(´select * from ORCAMENTO_OFIC_ELET_ITENS where GS_OOEI_CODACES=´+inttostr(E));
  _FormOSSaidaB.BD_ORCA_ITENS.Open;
  _FormOSSaidaB.showmodal;
end;




aí vem somente os ítens referente ao código ao código da OS....e aí que o bicho pega.....este é o código da baixa da OS..


procedure T_FormOSSaidaB.Button1Click(Sender: TObject);
var
  a,b,c : real;
  r: integer;
  g: string;
begin
  QRLabel31.Caption := ´R$ ´+ _FormOSSaida.BD_OFC_ELEGS_OOE_VALOR_TOT.Value;
  QuickRep1.PrinterSettings.Copies := strtoint(Table5Imprime_Folhas_BX.value);
  r:= _FormOSSaida.BD_OFC_ELEGS_OOE_CODIGO.Value;
  g:=format(´¬5.5d´,[r]);
  if MessageDlg(´Deseja dar saída a O.S. do cliente  ´ + _FormOSSaida.BD_OFC_ELEGS_OOE_NOME.Value + ´ ?´,mtConfirmation,[mbYes,mbNo],0)<>mrYes then Abort;
  Table3.Insert;
  Table3Origem.value := ´OS´;
  Table3CodigDoc.value := g;
  Table3Nome.value := _FormOSSaida.BD_OFC_ELEGS_OOE_NOME.Value;
  Table3CodAcess.Value := _FormOSSaida.BD_OFC_ELEGS_OOE_CODACES.Value;
  Table3DataEnt.value := _FormOSSaida.BD_OFC_ELEGS_OOE_DATA_ENT.Value;
  Table3Dataorcamento.value := _FormOSSaida.BD_OFC_ELEGS_OOE_DATA_ORC.Value;
  Table3ValorTot.value := Edit3.Text;
  Table3Decricao.value := _FormOSSaida.BD_OFC_ELEGS_OOE_APDESCR.Value;
  Table3Defeito.Value :=  _FormOSSaida.BD_OFC_ELEGS_OOE_DEF_ALEGADO.Value;
  Table3Marca.value := _FormOSSaida.BD_OFC_ELEGS_OOE_MARCA.Value;
  Table3Modelo.value := _FormOSSaida.BD_OFC_ELEGS_OOE_MODELO.Value;
  Table3Ndeserie.value := _FormOSSaida.BD_OFC_ELEGS_OOE_NSERIE.Value;
  Table3Datapreventr.value := _FormOSSaida.BD_OFC_ELEGS_OOE_DATA_ENT.Value;
  Table3DataOut.value := _FormOSSaida.BD_OFC_ELEGS_OOE_DATA_SAI.Value;
  Table3Resp.value := _FormOSSaida.BD_OFC_ELEGS_OOE_TEC_RESP.Value;
//  Table3Condsaida.value := _FormOSSaida.Table1Cond_saida.value;
  Table3.Post;
  a:=strtofloat(edit3.text);
  b:=strtofloat(_FormOSSaida.BD_OFC_ELEGS_OOE_VALOR_TOT.Value);
  c:= b-a ;
  QRLabel5.Caption := ´R$ ´+ floattostrf(c,ffFixed,10,2);
  QRLabel7.Caption := ´R$ ´+ Edit3.Text;
  r:= _FormOSSaida.BD_OFC_ELEGS_OOE_CODIGO.Value;
  g:=format(´¬5.5d´,[r]);
  QRLabel16.Caption:= g;
  if Application.MessageBox(´Imprimir documento de saida ?´ , ´Imprimir.´, MB_ICONQUESTION + MB_YESNO) = IDYES then
  QuickRep1.Print;
  _FormOSSaida.BD_OFC_ELE.Delete;
  Close;
end;



Ao final deste ao código acima queria adicionar as funções...somente isso...más complicado...


GOSTEI 0
Rjun

Rjun

22/08/2005

Gigatel, onde que tá o trecho de código onde você faz a exclusão?

Recomendações :

1) Use DataModule. Não faça isso que você fez. Acessar componentes de um outro Form a partir de outro.

2) Dê uma procurada em padrões de nomenclatura. Esse tipo de sintaxe com _FORM??????????? é dificil de entender.

3) Você está usando InterBase, certo? Evite usar TTABLE. Use TQUERY. Utilize instruções SQL para inserir registros. Assim como você usou SELECT, utilize INSERT/UPDATE/DELETE.


GOSTEI 0
Gigatel

Gigatel

22/08/2005

Gigatel, onde que tá o trecho de código onde você faz a exclusão? Recomendações : 1) Use DataModule. Não faça isso que você fez. Acessar componentes de um outro Form a partir de outro. 2) Dê uma procurada em padrões de nomenclatura. Esse tipo de sintaxe com _FORM??????????? é dificil de entender. 3) Você está usando InterBase, certo? Evite usar TTABLE. Use TQUERY. Utilize instruções SQL para inserir registros. Assim como você usou SELECT, utilize INSERT/UPDATE/DELETE.


1) Eu uso DataModule sim...por questões para facilitar um processo optei por usar assim para executar alguns cálculos....
2) Por isso que não queria mostrar os códigos..pois os padrões adotados por mim são de entendimento meu, más explicando isso ´ _Form´ e para facilitar o acesso pois com este ´_´o form fica como primeiro na janela o Objeto inspector facilitando assim o acesso ao form...
3) Por questões de compatibilidade eu sempre usei o IBQUERY, IBUpdateSQL e um DATA MODULE, más se num está dando certo deixa....

Agora a questão que foi colocada aki é o seguinte...eu num sabia como deletar vários arquivos, ou seja eu num tinha um código para isto, inclusive coloque um botão só para teste da função aki colocado..mostrei os campos e e as tabelas e estou testando más num funciona...
espero ter esclarecido..mas acho que suas questões referentes 1 e 2 num afeta diretamente o meu código..... o que eu quero deleter arquivos filtrados por um codigo e em seguida deleta a tabela principal..más é isso aí...


GOSTEI 0
Gigatel

Gigatel

22/08/2005

Vou colocar umas imagens para melhor comprensão...

esta é a tela principal


[img][URL=http://imageshack.us][img:fde441c79a]http://img400.imageshack.us/img400/2199/telaprincipal8cy.jpg[/img:fde441c79a][/URL][/img]


esta é a tela da Baixa com os ítens..


[img][URL=http://imageshack.us][img:fde441c79a]http://img400.imageshack.us/img400/5583/gamdejuju0qn.jpg[/img:fde441c79a][/URL][/img]


Este a o problema ( eu acho )


[img][URL=http://imageshack.us][img:fde441c79a]http://img400.imageshack.us/img400/7682/gand9wr.jpg[/img:fde441c79a][/URL][/img]


está muito estranho.. é outra coisa,,, os códigos aki citados estão estão nos botoes Galf e juju..por tanto as funções não está na função final do programa....


GOSTEI 0
Kenio_c

Kenio_c

22/08/2005

Amigo faça assim :
1- coloque um componente IBSQL

procedure Apaga;
var SQL : String;
begin
SQL := ´ delete from NOME_DA_TABELA where CHAVE_PRIMARIA = ´
+´IntToStr(VALOR_CHAVE_PRIMARIA);
IBSQL.Close;
IBSQL.SQL.Clear;
IBSQL.SQL.Add(SQL);
IBSQL.ExecQuery;
end;


GOSTEI 0
Gigatel

Gigatel

22/08/2005

Amigo faça assim : 1- coloque um componente IBSQL procedure Apaga; var SQL : String; begin SQL := ´ delete from NOME_DA_TABELA where CHAVE_PRIMARIA = ´ +´IntToStr(VALOR_CHAVE_PRIMARIA); IBSQL.Close; IBSQL.SQL.Clear; IBSQL.SQL.Add(SQL); IBSQL.ExecQuery; end;


Blz...coloquei o UBquery e coloque o neme de BD_ORCA_ITENS e o nome da tabela no IB é o ORCAMENTO_OFIC_ELET_ITENS e o campo com o grupo a ser deletado é o GS_OOEI_CODACES.. só que tem um detalhe achave primária não ceita números duplicados..o seja este campo (GS_OOEI_CODACES) Recebe valores iguais e mesmo este código abaixo está dando este erro...[Error] Unit28.pas(506): Unterminated string...Valew...


var SQL : String;
begin
SQL := ´ delete from ORCAMENTO_OFIC_ELET_ITENS where GS_OOEI_CODACES = ´
+´IntToStr(GS_OOEI_CODACES);
BD_ORCA_ITENS.Close;
BD_ORCA_ITENS.SQL.Clear;
BD_ORCA_ITENS.SQL.Add(SQL);
BD_ORCA_ITENS.ExecQuery;
end;




GOSTEI 0
Sandra

Sandra

22/08/2005

Gigatel,

Pela mensagem de erro e analisando o código, talvez esteja faltando a ( [b:c6ab280148]´[/b:c6ab280148] ) - aspa simples - ao encerrar a string do select.

var SQL : String; 
begin 
SQL := ´ delete from ORCAMENTO_OFIC_ELET_ITENS where GS_OOEI_CODACES = ´ 
+´IntToStr(GS_OOEI_CODACES)´;     <= essa última
BD_ORCA_ITENS.Close; 
BD_ORCA_ITENS.SQL.Clear; 
BD_ORCA_ITENS.SQL.Add(SQL); 
BD_ORCA_ITENS.ExecQuery; 
end; 

Verifique!


GOSTEI 0
Gigatel

Gigatel

22/08/2005

Gigatel, Pela mensagem de erro e analisando o código, talvez esteja faltando a ( [b:5b304f5f13]´[/b:5b304f5f13] ) - aspa simples - ao encerrar a string do select.
var SQL : String; 
begin 
SQL := ´ delete from ORCAMENTO_OFIC_ELET_ITENS where GS_OOEI_CODACES = ´ 
+´IntToStr(GS_OOEI_CODACES)´;     <= essa última
BD_ORCA_ITENS.Close; 
BD_ORCA_ITENS.SQL.Clear; 
BD_ORCA_ITENS.SQL.Add(SQL); 
BD_ORCA_ITENS.ExecQuery; 
end; 



Verifique!




Corrigido..más agora dá isso..

[img][URL=http://imageshack.us][img:5b304f5f13]http://img201.imageshack.us/img201/7661/erro12nx.jpg[/img:5b304f5f13][/URL][/img]

xiiiiiii..


GOSTEI 0
Sandra

Sandra

22/08/2005

Bom... Gigatel, tentando: :roll:

var SQL, Campo : String; 
begin 
Campo := IntToStr(BD_ORCA_ITENS.GS_OOEI_CODACES.asInteger);
SQL := ´ delete from ORCAMENTO_OFIC_ELET_ITENS where GS_OOEI_CODACES = Campo´);
BD_ORCA_ITENS.Close; 
BD_ORCA_ITENS.SQL.Clear; 
BD_ORCA_ITENS.SQL.Add(SQL); 
BD_ORCA_ITENS.ExecQuery; 
end; 



GOSTEI 0
Rjun

Rjun

22/08/2005

var 
  SQL: String; 
begin 
  SQL := ´ delete from ORCAMENTO_OFIC_ELET_ITENS where GS_OOEI_CODACES = :Campo´); 
  BD_ORC_ITENS.ParamByName(´Campo´).AsInteger := BD_ORCA_ITENS.FieldByName(´GS_OOEI_CODACES´).asInteger

  BD_ORCA_ITENS.SQL.Clear; 
  BD_ORCA_ITENS.SQL.Add(SQL); 
  BD_ORCA_ITENS.ExecQuery; 
end; 



GOSTEI 0
Gigatel

Gigatel

22/08/2005

Acho que está minha tabela está possuida...


olhe o erro..

[img][URL=http://imageshack.us][img:a4f29214af]http://img292.imageshack.us/img292/7913/erro27uc.jpg[/img:a4f29214af][/URL][/img]

heheeh tá osso...


GOSTEI 0
Rjun

Rjun

22/08/2005

Usa o ultimo código q te passei. Esse código que a Sandra postou está errado.


GOSTEI 0
Sandra

Sandra

22/08/2005

O nome da Tabela é.. ORCAMENTO_OFIC_ELET_ITENS .. O nome do componente ( ibquery )é.. BD_ORCA_ITENS .. O nome do campo código é ... BD_ORCA_ITENSGS_OOEI_CODIGO ... Só para eclarecimento..

Campo := IntToStr(BD_ORCA_ITENSGS_OOEI_CODACES.asInteger); 


PS: viu a resposta do Rjun que está antes da sua última postagem?


GOSTEI 0
Gigatel

Gigatel

22/08/2005

POr favor desculpem este mala sem alça más tá osso mesmo..o piro e que depois da função funcionando vou ter que arruma um jeito de tranferir os dados para outra tabela ( arquivo morto )...

más deu outro erro....

[img][URL=http://imageshack.us][img:aa3b8fc2cd]http://img329.imageshack.us/img329/7245/erro33na.jpg[/img:aa3b8fc2cd][/URL][/img]


Alías, pode colocar tudo isso de imagem aki no fórum ? eu que posso fazer é só agradecer a suas paciencias....vlw..


GOSTEI 0
Rjun

Rjun

22/08/2005

Gigatel, veja o último código que postei.


GOSTEI 0
Gigatel

Gigatel

22/08/2005

Gigatel, veja o último código que postei.


Blz..minha joia..eu testei seu código dá este erro ao copilar

[img][URL=http://imageshack.us][img:8bf8b832da]http://img160.imageshack.us/img160/6391/erro42ba.jpg[/img:8bf8b832da][/URL][/img]


....


GOSTEI 0
Rjun

Rjun

22/08/2005

var 
  SQL: String; 
begin 
  SQL := ´delete from ORCAMENTO_OFIC_ELET_ITENS where GS_OOEI_CODACES = :Campo´; 
  BD_ORC_ITENS.ParamByName(´Campo´).AsInteger := BD_ORCA_ITENS.FieldByName(´GS_OOEI_CODACES´).asInteger 

  BD_ORCA_ITENS.SQL.Clear; 
  BD_ORCA_ITENS.SQL.Add(SQL); 
  BD_ORCA_ITENS.ExecQuery; 
end; 


Tem um paranteses no fim da linha...tira ele.


GOSTEI 0
Sandra

Sandra

22/08/2005

var 
  SQL: String; 
begin 
  SQL := ´delete from ORCAMENTO_OFIC_ELET_ITENS where GS_OOEI_CODACES = :Campo´; 
  BD_ORC_ITENS.ParamByName(´Campo´).AsInteger := BD_ORCA_ITENS.FieldByName(´GS_OOEI_CODACES´).asInteger ;   <= aqui

  BD_ORCA_ITENS.SQL.Clear; 
  BD_ORCA_ITENS.SQL.Add(SQL); 
  BD_ORCA_ITENS.ExecQuery; 
end; 


Mais uma coisinha. Está faltando o ´;´ (ponto e vírgula) também. :D


GOSTEI 0
Gigatel

Gigatel

22/08/2005

Só para saber onde vc´s arrumaram este tal de ´ Campo´ o programa agora copila más clico no botão dá que o parametro CAMPO não foi encontrado...estranoh más eu tbm num entendí este negócio aó do campo naum..


GOSTEI 0
Rjun

Rjun

22/08/2005

E que no código esta atribuindo o valor antes de adicionar o SQL. Faça o seguinte:

var 
  SQL: String; 
begin 
  SQL := ´delete from ORCAMENTO_OFIC_ELET_ITENS where GS_OOEI_CODACES = :Campo´; 
  BD_ORCA_ITENS.SQL.Clear; 
  BD_ORCA_ITENS.SQL.Add(SQL); 

  BD_ORC_ITENS.ParamByName(´Campo´).AsInteger := BD_ORCA_ITENS.FieldByName(´GS_OOEI_CODACES´).asInteger ;   

  BD_ORCA_ITENS.ExecQuery; 
end; 


Agora deve funcionar.


GOSTEI 0
Gigatel

Gigatel

22/08/2005

Agora deu este erro na hora da copilação..

Algum moderador poderia deletar foto acima que está fora do tamanho permitido aki no fúrum?


[Error] Unit28.pas(528): Undeclared identifier: ´ExecQuery´




[color=red:1ddf24f9c9]Editando o tópico:[/color:1ddf24f9c9]
Algum moderador poderia deletar foto acima que está fora do tamanho permitido aki no fúrum?
Gigatel,
Agora que postou, não tem problema, pode deixar. :wink:
Somente para as próximas vezes que incluir uma figura no tópico/post, após dar o printscreen, redimensione-a deixando um pouco menor e faça o upload... apenas isso.
Qualquer dúvida, entre en contato.
Sandra/Moderação


GOSTEI 0
Gigatel

Gigatel

22/08/2005

Agora deu este erro na hora da copilação.. Algum moderador poderia deletar foto acima que está fora do tamanho permitido aki no fúrum? [Error] Unit28.pas(528): Undeclared identifier: ´ExecQuery´



Troquei a instrução esta instrução
BD_ORCA_ITENS.ExecQuery;


por esta

BD_ORCA_ITENS.ExecSql;


Funcionou quando saio da form más deleta...saio da baixa e volto novamente os dados estão todos lá...[/code]


GOSTEI 0
Gigatel

Gigatel

22/08/2005

Fiz um teste de rotina coloquei um outro Tbutoon e nele coloquei..

BD_ORCA_ITENS.Delete;


Só para testar se deleta mesmo...
Apaga más dá este erro ao sair do formulário..

[img][URL=http://imageshack.us][img:70a6fa286b]http://img380.imageshack.us/img380/7325/erro55nk.jpg[/img:70a6fa286b][/URL][/img]

Para minha supresa quando volto ao mesmo registro o arwuivo continua lá...acho que agora tenho um problema na tabela...O que vc´s acham ?[/code]


GOSTEI 0
Gigatel

Gigatel

22/08/2005

Olha que doideira...quando removo a instrução ... BD_ORCA_ITENS.Delete; .... ele para de dar este erro..?????que doideira...


GOSTEI 0
Gigatel

Gigatel

22/08/2005

Será que o código que eu uso para poder filtrar a tabela está fazendo estes bugs ?

procedure T_FormOSSaida.ToolButton8Click(Sender: TObject);
var
e:integer;
begin
  E:=_FormOSSaida.BD_OFC_ELEGS_OOE_CODIGO.Value;
  _FormOSSaidaB := T_FormOSSaidaB.Create(application);
  _FormOSSaidaB.BD_ORCA_ITENS.Close;
  _FormOSSaidaB.BD_ORCA_ITENS.SQL.Clear;
  _FormOSSaidaB.BD_ORCA_ITENS.SQL.Add(´select * from ORCAMENTO_OFIC_ELET_ITENS where GS_OOEI_CODACES=´+inttostr(E));
  _FormOSSaidaB.BD_ORCA_ITENS.Open;
  _FormOSSaidaB.showmodal;
end;



este código coloco no Butoon que entra no form da baixa...


GOSTEI 0
Gigatel

Gigatel

22/08/2005

Caso perdido...


GOSTEI 0
Gigatel

Gigatel

22/08/2005

Fiz um resumido do programa que apresenta o mesmo problema..paga os fontes aí..a tabela é a que eu uso mesmo....[url]http://geocities.yahoo.com.br/gigatelsoft/Fonte.zip[/url]

dá uma olhada e me fala..


GOSTEI 0
Gigatel

Gigatel

22/08/2005

Fiz um resumido do programa que apresenta o mesmo problema..paga os fontes aí..a tabela é a que eu uso mesmo....[url]http://geocities.yahoo.com.br/gigatelsoft/Fonte.zip[/url] dá uma olhada e me fala..



paga os fontes aí..a tabela é a que eu uso mesmo


é Pega os fontes aí..para evitar de um falar que estou vendendo algo..hehehehehee


GOSTEI 0
Gigatel

Gigatel

22/08/2005

AInda sem solution


GOSTEI 0
Gigatel

Gigatel

22/08/2005

E aí Galera...num tem recuso mesmo naum ?

Tive uma idéa más num sei se seria viável..acho que sobrecarregaria demais o programa..invés de deletar deixar como morto...porque tudo que se deleta nas minhas tabelas vão para um morto...como niguém aki no fórum conseguiu me ajudar nesta questão, acho que ficaria interessante deixar sem deletar, já que quando deleto um registro da tabela principal o morto herda todas as informações referente ao arqv. excluido aí e só associar o morto a tabela ítens..más fico com medo é que esta tabela recebe uma grande quant. de informação e pode ficar sobrecarregado.. com o tempo...


GOSTEI 0
Gigatel

Gigatel

22/08/2005

num tem nenhum feroz em SQL que possa me ajudar....ví que a questão acima não é viavél..e presciso mesmo da ajuda da galera...veja só só uma idéia, tenho uma função que faz cálculos no lugar dos cálculos colocar um delete...hehehehe é uma idéia né ?


var
  i,r: integer;
  n: real;
begin
  n:= 0;
  r:= BD_CONT_REC.RecordCount;
  BD_CONT_REC.First;
    for i:=1 to r do
    begin
    n:= n + BD_CONT_RECGS_COR_VALOR_PARCELA.asfloat;
    BD_CONT_REC.Next;
  end;



Tira os cáculos e aproveita somente a parte que percorre a tabelae logo depois do next..colocar um delete..será que funciona ?


GOSTEI 0
Gigatel

Gigatel

22/08/2005

Problema resolvido..........é muito simples......vlw as pessoas que quizeram e se despuzeram a me ajudar..segue a abaixo a função vlw até mais...


var
  i,r: integer;
begin
  r:= BD_ORCA_ITENS.RecordCount;
  BD_ORCA_ITENS.First;
    for i:=1 to r do
    begin
    BD_ORCA_ITENS.Next;
    BD_ORCA_ITENS.Delete;
  end;





Num acredito que perdí um tempão danado nisto ..más é assim mesmo que num perde....


GOSTEI 0
POSTAR