Fórum Ler campo autoincremento ADO/Access apos INSERT INTO #259995
25/11/2004
0
ADODataSet1.Recordset := ADOCommand1.Execute;
mas não funcionou. O código que estou usando é o seguinte.
procedure TForm1.Button1Click(Sender: TObject); var nCod : integer; begin ADODataSet1.Open; ADOCommand1.CommandText := ´INSERT INTO Tabela1 ´+ ´(DataHora) ´+ ´VALUES (#´+DateToStr(Now)+´)´; ADODataSet1.Recordset := ADOCommand1.Execute; with ADODataSet1 do begin nCod := Fields.FieldByName(´CampoAutoInc´).AsInteger; end; end;
com
ADODataSet1.CommandType = cmdTable
ADODataSet1.CommandText = Tabela1
Retorna erro que o dataset não está aberto
Obrigado,
Eduardo[/code]
Quadrado
Curtir tópico
+ 0Posts
25/11/2004
José Henrique
Gostei + 0
27/11/2004
Quadrado
Segundo ele, mesmo em ambiente multi-usuário, funciona bem, pois o retorno da função é referente ao próprio usuário.
Boa sorte a todos.
Gostei + 0
27/11/2004
Quadrado
Se alguem tiver alguma sugestão para correção deste erro, agradeço.
Obrigado,
Quadrado.
Gostei + 0
27/11/2004
José Henrique
Veja este link da Microsoft [url]http://support.microsoft.com/default.aspx?scid=kb;EN-US;q200300[/url]
Gostei + 0
28/11/2004
Thomaz_prg
Gostei + 0
30/11/2004
Quadrado
No site da Microsoft - Office - Access 2003 eles dizem o seguinte:
isto está no link:
[url]http://office.microsoft.com/pt-br/assistance/HP010322481046.aspx[/url]
Na ajuda do Delphi para o métedo ADOCommand.execute ele fala que basta atribuir diretamente o resultado do comando a um ADODataSet:
ADODataSet.RecordSet := ADOCommand.Execute;
Mas retorna erro dizendo que o recordset não esta aberto e eu não sei como fazer.
Usando a instrução ´SELECT @@IDENTITY´ funciona sem erros, mas retorna valor zero. Fiz varia modificações em propriedades do DataSet e da conexão, mas não consegui resultado.
Eu preciso resover este pepino, para parar de trabalhar com abertura e fechamento de tabelas a todo momento.
Agradeço qualquer ajuda.
Quadrado
Gostei + 0
30/11/2004
Thomaz_prg
Gostei + 0
30/11/2004
Quadrado
Veja o link:
[url]http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnadonet/html/manidcrisis.asp[/url]
Vou fazer outros testes, inclusive o do Fieldeditor e passo aqui depois.
Obrigado.
Gostei + 0
30/11/2004
José Henrique
Creio que achei a solução a partir deste informe da MS
[url=http://support.microsoft.com/default.aspx?scid=kb;en-us;221931]How To Return Record´s Autonumber Value Inserted into Access DB[/url]
Que em resumo diz o seguinte:
1 - postar a inserção;
2 - guardar o bookmark do registro postado;
3 - reconsultar (requery) o dataset.
e fiz assim no meu código:
. . . DM.qryPacientes.FieldByName(´CodFuncionárioIns´).Value := Usuario.Codigo; DM.qryPacientes.Post; bkmPosicao := DM.qryPacientes.Bookmark; DM.qryPacientes.Requery; DM.qryPacientes.Bookmark := bkmPosicao; ShowMessage(DM.qryPacientes.FieldByName(´CodPaciente´).AsString); . . .
Funcionou perfeitamente!!!
Gostei + 0
01/12/2004
Quadrado
Atualmente eu estou usando esta forma para obter o campo autoincremento. Na realidade eu nem realizo a rechamada do DataSet, simplesmente leio o campo após a inserção e funciona direito em rede com um monte de usuários.
Table1.Open; Table1.Insert; Table1Campo2.Value := 2; Table1Campo3.Value := ´abc´; Table1.Post; nValor := Table1Campo1.Value; Table1.Close;
O problema é fazer isto via instrução SQL INSERT INTO, pois em alguns pontos do programa, realizo aberturas e fechamentos de várias tabelas, que segundo me consta diminui a performance do sistema.
Hoje testei a chamada por ´SELECT @@IDENTITY´ no Access 2000 e no Access 2002 e também não funcionou. Na pesquisa que eu fiz na internet em varios foruns, muita gente fala que funciona, inclusive na Microsoft, porém deve ter algum detalhe de configuração do DataSet ou da Conexão que não está funcionando.
Continuo tentando.
Quadrado
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)