Como saber se um comando insert foi bem sucedido?

Olá Pessoal
Em tudo que tenho feito usando linguagens e banco de dados sempre procuro trabalhar de uma maneira transacional, por exemplo em SQLSERVER:
begin transaction
insert into minha tabela values (1, ‘TESTE’)
if not @@ERROR
update outra tabela set contador += 1 where id = 5

if @@ERROR
rollback transaction
else
commit transaction

Estou usando o scriptcase puro.
Já vi que ele possui as macros sc_begin_trans, sc_commit_trans, sc_rollback_trans.
Estou usando o sc_exec_sql(“insert into minha tabela values (1, ‘TESTE’)”) para o meu comando insert.
Mas como saber se o comando sc_exec_sql foi bem sucedido?
Quando tenho um tabela onde o id_chave_primaria é autoincremento, como saber o seu valor depois do comando insert?

Enfim, imagino serem questões básicas para uma aplicação de banco de dados.

Eh, infelizmente, e como já discutido antes essa macro não guarda o retorno da query executada, se foi bem sucedida, ou não.

O SC nos formulários faz isso internamente, então não se preocupe.

mas se for um procedimento seu, você pode não usar a macro e sim uma instrução php e capturar o erro, ou ler registro por dois campos criados na tabela só para isso, tipo sessao_php + microtime, esse dois campos devem ser alimentados pelo php.

Olá Haroldo

Por acaso você teria algo de exemplo para isso?
Estou gerando RPS para uma determinada tbl_empresa (tem várias em meu banco). Nela tem o prox_rps_num.
Eu pego esse prox_rps_num,
insert tbl_rps (nro_rps, …) value (prox_rps_num, …);
se bem sucedido
update tbl_empresa set prox_rps_num += 1 where id_empresa = $id_empresa;

Grato
Marco

$_sessao=session_id();
$_time=microtime();

insert tbl_rps (nro_rps,sessao_php, microtime, …) value (prox_rps_num, ‘$_sessao’’ ,$_time,…);

select count(*) from tbl_rps where sessao_php=’$_sessao’ and microtime=$_time;

se result_set == 1 {// bem sucedido
update tbl_empresa set prox_rps_num += 1 where id_empresa = $id_empresa;
}

Bom dia Haroldo

Muito obrigado pela sua ajuda.
Olhando o seu código, vi uma outra situação que vou precisar resolver.
Vi que você usou o session_id(). Teria como eu controlar a unicidade de um determinado usuário ao meu sistema? Quer dizer, não ter mais de uma ocorrência do mesmo usuário no sistema ao mesmo tempo?

Há sim.

Pesquise aqui em tópicos anteriores, já discutimos isso.

Olá Haroldo

Mais uma vez agradecido pelo pronto-atendimento ( e não é SUS rsrs)

em um dos tópidos que encontrei tira esta mensagem sua


Re:Negar login do mesmo usuário

« Responder #17 Online: Janeiro 28, 2012, 04:13:21 pm »

Citar

Colegas desculpa a demora, segue exemplo:
No exemplo passo o usuário como parâmetro na própria url, mas isso deve vir da sua aplicação de login.
Na sua aplicação de login você pode verificar usuários deslogados e remover o registro.
Não aconselho tempos muito curtos para bancos que não estão no mesmo servidor php.

São 3 aplicações:
Menu: Onde através do Jquery executo via ajax uma app do tipo blank a cada n segundos
Blank: Aqui atualizo a tabela com a hora atual para o usuário online.
Consulta: Apenas para demonstrar a atualização da hora do usuário online
*No lugar de “xxxxx” coloque uma nome válido.

http://iw.servehttp.com/sc/iw/app/Publico/useronline_menu/useronline_menu.php?user_=xxxxx

Create da tabela exemplo (MySql):

Código: [Selecionar]

CREATE TABLE useronline (
user varchar(20) NOT NULL,
datahora timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (user)
) ENGINE=MEMORY

Download:
http://www.scriptcaseajax.com.br/download.php?view.27

« Última modificação: Janeiro 30, 2012, 11:23:27 am por [Infinitus Web 2.0] Haroldo »

Denunciar ao Moderador Registrado

Plugins Scriptcase (Atualizado em 27/06/2013):
Etiquetas PDF, WebCam e outros:
http://infinitusweb.net.br/pluginsc/7/
Frente de Caixa (Impressão não Fiscal)
http://infinitusweb.com.br/plugins login: cx senha: 123
Nossos exemplos são comercializáveis.


Mas nenhum dos links está disponível. Teria como você disponibilizar isso pra mim?
Meu e-mail: marco.a.machado@gmail.com

Agradeço já de antemão.
Marco

Sim, esse seria um dos tópicos.

Os links não estão mais disponíveis realmente, eu não os deixo por muito tempo, e estava na versão 5.1.

mas explico como faço.

Ok … se puder enviar isso pra mim eu agradeço muito
Pode ser naquele email do ultimo post

Vai complicar porque não tenho mais instalado a v5

Eu ainda tenho o SC 5 aqui
se vc tiver o material me ajuda muito
Grato

Nossos exemplos ficam por tempo limitado disponíveis.