Array
(
)

problemas com BD

Fernando_cunha
   - 05 jan 2006

bom pessoal, eu estou postando novamente pq infelizmente abandonaram o outro topico, creio que nao por falta de vontade de ajudar, mas sim pq sao muitos topicos a serem respondidos e o meu ficou la no final ... enfim vamos ao problema ... vou detalhar ao maximo para que possam me ajudar ...

Estou utilizando ADO, MySQL ...

tenho um DataModule com 3 ADOTables, eu alterno as tabelas do sistema de acordo com a necessidade, resolvi fazer assim devido a quantidade de tabelas que o sistema possui, logo nao achei viavel inserir um componente para cada tabela.

tenho um form que faz um cadastro X ... nele estao os DBEdits necessarios para entrar com os dados, e os botoes para inserir, aplicar(post), deletar, editar e cancelar.

esse é o procedimento que executo até que o seguinte erro ocorra !!

´A linha nao pode ser localizada para atualizacao.Alguns valores podem ter sido alterados desde que ela foi lida pela ultima vez´

1 - tabelax.Append - { tabela entra em modo de insercao [DsInsert] }
2 - insiro os dados nos DBEdits
3 - tabelax.Post - { tabela entra em modo de visualizacao - [DsBrowse] }
4 - usando o DBEdit poderia alterar qualquer campo, ou antes de alterar executar o comando tabelax.Edit, fazendo de qualquer uma das formas a tabela entra em modo de Edicao [DsEdit]
5 - faço alteracoes necessarias e executo tabelax.Post , logo apos isso o erro ocorre ...

me sugeriram as seguintes alteracoes ...
setar corretamente os providers flags, para isso utilizo o seguinte codigo ...

#Código

procedure TFrmCadastroRE.ConfigProviderFlags;
var
x: integer;
begin
Dm.tb1.Fields.FieldByName(´CodREInterno´).ProviderFlags := [pfInUpdate, pfInWhere, pfInKey];
for x:= 1 to Dm.tb1.FieldCount - 1 do
Dm.tb1.Fields.Fields[x].ProviderFlags := [pfInUpdate];
end;


o restante do codigo do form que julgo relevante para resolucao do problema esta abaixo ...


#Código
procedure TFrmCadastroRE.FormCreate(Sender: TObject);

begin
Dm.tb1.TableName:= ´tbRegistroExportacao´;
Dm.tb1.Active:= True;
CarregaCombos;
CarregaFields;
ConfigProviderFlags;
end;


onde;
carregacombos apenas carrega dados para algumas combobox
carregafields seta cada dbedit com seu respectivo field
configproviderflags configura os flags de cada field

os codigos abaixo sao dos botoes mas como podem ver nao existe nada de diferente neles rs ...

#Código
procedure TFrmCadastroRE.botaonovoClick(Sender: TObject);
begin
dm.tb1.Append;
dm.tb1.FieldByName(´dtRE´).AsDateTime:= Date;
end;

procedure TFrmCadastroRE.botaopostClick(Sender: TObject);
begin
Dm.tb1.Post;
end;

procedure TFrmCadastroRE.BotaoDeleteClick(Sender: TObject);
begin
if not Dm.tb1.IsEmpty then Dm.tb1.Delete;
end;

procedure TFrmCadastroRE.Button1Click(Sender: TObject);
begin
Dm.tb1.Edit;
end;


bom pessoal, tentei detalhar ao maximo o problema, sugestoes sao bem vindas!! :roll:

[]ssssss


Fernando_cunha
   - 05 jan 2006

resolveram o problema no outro topico, peço desculpas pela preciptacao, só para nao perder o topico, alguem saberia me explicar com mais detalhes o que sao providerflags, para que servem, qual a aplicacao!!

e só mais uma coisa ...

query ou table??? quando é mais indicado usar um ou outro????

[]ssssssssssssssssssssssssssssssssss


Gandalf.nho
   - 05 jan 2006

Bloqueado por Infração às Regras de Conduta :

Duplicidade.
http://forum.clubedelphi.net/viewtopic.php?p=237780

Para maiores esclarecimentos pode mandar-me uma [url=http://forum.clubedelphi.net/privmsg.php?mode=post&u=8378]Mensagem Particular[/url].