Fórum Last_Insert_Id() só retorna zero????? #31138

16/11/2007

0

Alguém poderia me ajudar. :? Estou usando Delphi 7, MySql 5 e Zeos para conexão de dados. Após executar a inserção dos dados na primeira tabela, eu tento pegar o Last_Insert_Id() da tabela Pessoa, mas a função só retorna zero.

           // Insere na primeira tabela
            sqlCondominos.SQL.clear;
            sqlCondominos.SQL.add(´insert into PESSOA ´ +
                          ´(PESSOA.NOME, PESSOA.ENDERECO, PESSOA.NUMERO, ´ +
                          ´ PESSOA.CEP, PESSOA.RG, PESSOA.SEXO, ´ +
                          ´ PESSOA.PROFISSAO, PESSOA.DATANASC, ´ +
                          ´ PESSOA.DATACAD, PESSOA.DATAALT) ´ +
                 ´values  ´ +
                          ´("´+ txtNome.Text + ´","´ + txtEndereco.Text + ´","´
                              + txtNumero.Text + ´","´ + txtCep.Text + ´","´
                              + txtRG.Text +´","´ + cbxSexo.Text + ´","´ + txtProfissao.Text + ´","´
                              + FormatDateTime(´yyyyMMdd´,dtpDtNasc.Date) + ´","´
                              + FormatDateTime(´yyyyMMdd´,Date) + ´","´
                              + FormatDateTime(´yyyyMMdd´,Date) + ´")´);
            sqlCondominos.ExecSql;
            sqlTemp.SQL.Clear;
            sqlTemp.SQL.Add(´Select Last_Insert_Id() as CODPES´);
            sqlTemp.ExecSql;
            idPessoa := sqlTemp.FieldByName(´CODPES´).AsInteger;
            ShowMessage(´O id é: ´ + IntToStr(idPessoa));



Soueusei26

Soueusei26

Responder

Posts

31/03/2008

Carlosphp

Cara,
não sei como é no delphi, mas no o comando last_insert_id() tem que receber como parametro o link da conexão.

ex: $ultimo_id = last_insert_id($conexao);

Espero ter dado uma luz.
Abraços


Responder

Gostei + 0

05/04/2008

Mysys

LAST_INSERT_ID([expr])
Retornao´ultimovalorgeradoautomaticamentequetenhasidoinseridoemum
coluna AUTO_INCREMENT. Seeundefined [mysql_insert_id()],pageunde-
fined.
mysql>SELECTLAST_INSERT_ID();
->195
O ´ultimo ID que foi gerado e mantido no servidor em uma base por conex˜ao.
Elen˜aoser´aalteradoporoutrocliente.Elenemmesmoser´aatualizadosevocˆe
atuializaroutracoluna AUTO_INCREMENT comumvalorn˜ao-m´agico(Isto´e,um
valroquen˜aoseja NULL e nem 0).
Sevocˆeinserirmuitosregistrosaomesmotempocomumainstru¸c˜aoinsert,
LAST_INSERT_ID() retornaovalordaprimeiralinhainserida.Araz˜aopara
´
isto´etornarpossivelreproduzirfacilmenteamesmaintru¸c˜ao INSERT emalgum
outroservidor.
Se expr ´edadocomumargumentopara LAST_INSERT_ID(), ent˜ao o valor
doargumento´eretornadopelafun¸c˜aoe´econfiguradocomoopr´oximovalor
paraserretornadopela LAST_INSERT_ID(). Isto pode ser ´util para simular
sequˆencias:
Primeirocrieatabela:
mysql>CREATETABLEsequencia(idINTNOTNULL);
mysql>INSERTINTOsequenciaVALUES(0);
Ent˜aoatabelapodeserusadaparagerarsequˆenciaden´umeroscomoestes:

mysql>UPDATEsequenciaSETid=LAST_INSERT_ID(id+1);
Vocˆepodegerarsequˆenciassemchamar LAST_INSERT_ID(), mas a utilidade
deseusarafun¸c˜aodestemodo´equeovalorID´emantidonoservidorcomoo
´ultimovalorgeradoautomaticamente(seguroparamulti-usur´ario).Vocˆepode
recuperaranovaIDcomovocˆeleriaqualquervalor AUTO_INCREMENT normal
noMySQL.Porexemplo, LAST_INSERT_ID() (semumargmento)retornar´aa
novaID.Afun¸c˜ao mysql_insert_id() daAPICtamb´empodeserusadapara
obterovalor.
Notequecomomysql_insert_id()s´o´eatualizadodepoisdeinstru¸c˜oesINSERT
e UPDATE, vocˆe n˜ao pode utilizar a fun¸c˜ao da API C para recuperar o valor para
LAST_INSERT_ID(expr) depoisdeexecutaroutrainstru¸c˜aoSQLcomo SELECT
ou SET.


Responder

Gostei + 0

19/03/2009

Luiz @nton

Cara o Erro está em ´sqlTemp.ExecSql´, quando for dar o select LAST_INSERT_ID() tem que ser sqlTemp.Open.

Um Abraço


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar