Fórum Erro: At beginning of table. Vamos discutir... #350879
20/12/2007
0
Tenho duas tabelas [b:96c4c3bab1]Pessoa (master)[/b:96c4c3bab1] e [b:96c4c3bab1][i:96c4c3bab1]Cliente (Detal)[/i:96c4c3bab1][/b:96c4c3bab1]
[b:96c4c3bab1][i:96c4c3bab1]Estruturas:[/i:96c4c3bab1][/b:96c4c3bab1]
[b:96c4c3bab1] Pessoa:[/b:96c4c3bab1]
- ID_Pessoa integer primary key
- Nome varchar(80)
- Telefone varchar(14)
- etc...
[b:96c4c3bab1] Cliente:[/b:96c4c3bab1]
- ID_Cliente integer primaey key
- ID_Pessoa integer foreign key (relaciona com a primary key de pessoa)
- LimiteCredito float
- Valor float
- etc...
Os componentes usados no delphi são Para:
[b:96c4c3bab1] Pessoa:[/b:96c4c3bab1]
[i:96c4c3bab1][b:96c4c3bab1] - ds_Pessoa:[/b:96c4c3bab1][/i:96c4c3bab1] TDataSource
- AutoEdit := False;
- DataSet := cds_Pessoa;
[i:96c4c3bab1][b:96c4c3bab1] - cds_Pessoa:[/b:96c4c3bab1][/i:96c4c3bab1] TClientDataSet
- IndexFieldNames := Nome;
- ProviderName := dsp_Pessoa;
[i:96c4c3bab1][b:96c4c3bab1] - dsp_Pessoa:[/b:96c4c3bab1][/i:96c4c3bab1] TDataSetProvider
- DataSet := sq_Pessoa;
- Options := [poPropogateChanges,poAllowCommandText,poUseQuoteChar];
- UpdateMode := upWhereKeyOnly;
[i:96c4c3bab1][b:96c4c3bab1] - sq_Pessoa:[/b:96c4c3bab1][/i:96c4c3bab1] TSqlQuery
- SQL := ´SELECT
P.ID_PESSOA,
P.NOME,
P.TELEFONE,
P.ECT...
FROM PESSOA P
INNER JOIN CLIENTE C ON (P.ID_PESSOA = C.ID_PESSOA)´;
- SQLConnection := sc_conexao: TSqlConnection;(obs: o sc_conexao está devidamente direcionado para uma base *.fdb)
[b:96c4c3bab1] Cliente:[/b:96c4c3bab1]
[i:96c4c3bab1][b:96c4c3bab1] - ds_Cliente:[/b:96c4c3bab1][/i:96c4c3bab1] TDataSource
- AutoEdit := False;
- DataSet := cds_Cliente;
[i:96c4c3bab1][b:96c4c3bab1] - cds_Cliente:[/b:96c4c3bab1][/i:96c4c3bab1] TClientDataSet
- [color=red:96c4c3bab1]DataSetField[/color:96c4c3bab1] := cds_pessoasq_cliente;
[i:96c4c3bab1][b:96c4c3bab1] - ds_Master:[/b:96c4c3bab1][/i:96c4c3bab1] TDataSource
- AutoEdit := False;
- DataSet := sq_Pessoa;
[i:96c4c3bab1][b:96c4c3bab1] - sq_Cliente:[/b:96c4c3bab1][/i:96c4c3bab1] TSqlQuery
- SQL := ´SELECT
C.ID_CLIENTE,
C.ID_PESSOA,
C.LIMITECREDITO,
C.VALOR,
C.ETC...
FROM PESSOA P
WHERE(
(C.ID_PESSOA = :ID_PESSOA)
)
- SQLConnection := sc_conexao: TSqlConnection;(obs: o sc_conexao está devidamente direcionado para uma base *.fdb)
Dai quando eu localizo um cliente que já existe altero os dados e gravo blz tudo normal, mas, se eu estiver cadastrando um cliente que não exista nem em cliente ném em pessoa, dai gera o bendito erro: [b:96c4c3bab1]At beginning of table[/b:96c4c3bab1], já tentei gravar primeiro no cds_cliente e depois cds_pessoa, já gravei primeiro em cds_pessoa e depois em cds_cliente, já gravei só em cds_pessoa já usei somente ApplyUpdates somente em pessoa, tudo dá erro.
Eu cheguei a conclusão que o componentes está tentando gravar primeiro os Details (a cds_cliente) como o ID de pessoa ainda naum existe no banco gera o erro. mas, não tenho certeza dessa conclusão.
Se alguém já passou por isso ou tem outra forma de resolver isso posta ai pra que possamos compartilhar da solução.
lembrando que as tabelas estão relacionadas no banco de dados e pela configuração dos componentes que citei acima da pra ver que estão relacionados também.
[b:96c4c3bab1][color=red:96c4c3bab1][size=18:96c4c3bab1]Agradeço a todos que se disposerem pelo menos a LER.[/size:96c4c3bab1][/color:96c4c3bab1][/b:96c4c3bab1]
Delphijean
Curtir tópico
+ 0Posts
20/12/2007
Rickpeixinho
Gostei + 0
20/12/2007
Delphijean
Não andianta refazer.
Mas, Obrigado!
Gostei + 0
20/12/2007
Ulisses_sjardim
Se quiser cadastrar da forma que falou utilize Stored Procedures. Ou faça na mão. Ou ainda garanta que o usuário cadastre primeiro pessoa para depois cadastrar o cliente.
Espero ter ajudado!
Gostei + 0
21/12/2007
Delphijean
Obrigado pela atenção.
Percebir que quando estamos usando o master/detalhe que configurei acima, quando aplicamos um APPEND na meste a detalhe fica internamemente em modo BROWSER e só vai pra INSERT quando digitamos alguma tecla num DBGrid por exemplo, dai ele gera o novo registro, entao se esarmos um dbEdit só vamos conseguir o mesmo resultado caso a propriedade AutoEdit do DataSource esteja True.
Então, conseguir resolver meu problema assim.
Obrigado pela atenção de todos.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)