Last_Insert_Id() só retorna zero?????
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
Curtidas 0
Respostas
Carlosphp
16/11/2007
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
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
GOSTEI 0
Mysys
16/11/2007
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.
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.
GOSTEI 0
Luiz @nton
16/11/2007
Cara o Erro está em ´sqlTemp.ExecSql´, quando for dar o select LAST_INSERT_ID() tem que ser sqlTemp.Open.
Um Abraço
Um Abraço
GOSTEI 0