[firebase-br] RES: Ajuda com SQL (Insert Into)

Jáber jaber em confesoft.com.br
Qua Fev 2 18:29:44 -03 2011


Acredito que a melhor forma seria realmente usar GEN_ID(GEN_TB_C100_ID, 0); 

Note que basta você não incrementar. Deixando o parâmetro como zero você não
correrá risco algum de incrementar o ID "sem querer". 

 

Espero ter ajudado... 

 

 

 

Jáber S. C. Lima 

Confesoft Automação Comercial 

 

(66)9613-2594 

(66)3426-2171 

 

-------Mensagem original------- 

 

De: Andrei Luís 

Data: 02/02/2011 17:14:18 

Para: FireBase 

Assunto: Re: [firebase-br] RES: RES: Ajuda com SQL (Insert Into) 

 

Olá André, 

 

Porque você falou que Gen_ID não é segura? Se a única utilidade dessa 

função é para incrementar um generator e evitar duplicidade de chave 

primária? 

 

[]s 

Andrei 

 

 

 

Em 2 de fevereiro de 2011 17:59, andre conrado <acf.andre em gmail.com>
escreveu: 

> Concordo contigo Antonio também, mas como sitei, o uso da função 

> GEN_ID para obter o último ID da tabela não é segura tb. O mais 

> correto mesmo seria utilizar uma SP que: 

> 

> 1 - gera o ID e guardar em uma variável local; 

> 2 - Insira o registro na tabela TB_C100 utilizando para o ID o número 

> guardado na variável local; 

> 3 - e por último insira o registro na tabela TB_C170, utilizando a 

> mesma variável local; 

> 

> mas não sabemos se o cenário de nosso amigo permiti essa simultaneidade; 

> 

> Em 02/02/11, Antonio Carlos<a.lima.silva em terra.com.br> escreveu: 

>> Vou dar uma do contra aqui, quando vc faz select max em um contesto
normal 

>> de transação, se esse select for feito por duas estações "simultaneamente
 

>> para as duas retornarão o mesmo valor e vai haver violação da chave. 

>> 

>> Att. 

>> Antonio Carlos 

>> 

>> 

>> 

>> Confidencialidade: A informação contida nesta mensagem de e-mail,
incluindo 

>> quaisquer anexos, é confidencial e está reservada apenas à pessoa ou 

>> entidade para a qual foi endereçada. Se você não é o destinatário ou a 

>> pessoa responsável por encaminhar esta mensagem ao destinatário, você
está, 

>> por meio desta, notificado que não deverá rever, retransmitir, imprimir, 

>> copiar, usar ou distribuir esta mensagem de e-mail ou quaisquer anexos.
Caso 

>> você tenha recebido esta mensagem por engano, por favor, contate o
remetente 

>> imediatamente e apague esta mensagem de seu computador ou de qualquer
outro 

>> banco de dados. Muito obrigado. 

>> 

>> -----Mensagem original----- 

>> De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br]
Em 

>> nome de Diego Maccari 

>> Enviada em: quarta-feira, 2 de fevereiro de 2011 14:50 

>> Para: FireBase 

>> Assunto: Re: [firebase-br] RES: Ajuda com SQL (Insert Into) 

>> 

>> Prezado André 

>> 

>> Primeiramente obrigado por sua disposição 

>> 

>> Substitui a função GEN_ID pela função MAX() sendo assim 

>> onde eu teria: 

>> 

>> INSERT INTO TB_C170 (ID, CNPJ_IMP, MES_IMP, ANO_IMP, REG, NUM_ITEM, 

>> COD_ITEM, DESCR_COMPL, QTD, UNID, VL_ITEM, VL_DESC, IND_MOV, CST_ICMS,
CFOP, 

>> 

>> COD_NAT, VL_BC_ICMS, ALIQ_ICMS, VL_ICMS, VL_BC_ICMS_ST, ALIQ_ST,
VL_ICMS_ST, 

>> 

>> IND_APUR, CST_IPI, COD_ENQ, VL_BC_IPI, ALIQ_IPI, VL_IPI, CST_PIS,
VL_BC_PIS, 

>> 

>> ALIQ_PIS, QUANT_BC_PIS, ALIQ_PIS_REAIS, VL_PIS, CST_COFINS, VL_BC_COFINS,


>> ALIQ_COFINS, QUANT_BC_COFINS, ALIQ_COFINS_REAIS, VL_COFINS, COD_CTA, 

>> ID_C100) VALUES ((SELECT GEN_ID(GEN_TB_C170_ID, 1) FROM RDB$DATABASE), 

>> '00.000.000/0000-00', 'Janeiro', '2010', 'C170', 1, '42196', NULL, '16', 

>> 'UN', '606.4', '0', '0', '060', '1403', '1403', '0', '0', '0', '0', '0', 

>> '0', '0', NULL, NULL, '0', '0', '0', '04', '0', '1.65', NULL, NULL, '0', 

>> '04', '0', '7.6', NULL, NULL, '0', '604', (SELECT GEN_ID(GEN_TB_C100_ID,
0) 

>> FROM RDB$DATABASE)); 

>> 

>> Passaria a ser: 

>> 

>> INSERT INTO TB_C170 (ID, CNPJ_IMP, MES_IMP, ANO_IMP, REG, NUM_ITEM, 

>> COD_ITEM, DESCR_COMPL, QTD, UNID, VL_ITEM, VL_DESC, IND_MOV, CST_ICMS,
CFOP, 

>> 

>> COD_NAT, VL_BC_ICMS, ALIQ_ICMS, VL_ICMS, VL_BC_ICMS_ST, ALIQ_ST,
VL_ICMS_ST, 

>> 

>> IND_APUR, CST_IPI, COD_ENQ, VL_BC_IPI, ALIQ_IPI, VL_IPI, CST_PIS,
VL_BC_PIS, 

>> 

>> ALIQ_PIS, QUANT_BC_PIS, ALIQ_PIS_REAIS, VL_PIS, CST_COFINS, VL_BC_COFINS,


>> ALIQ_COFINS, QUANT_BC_COFINS, ALIQ_COFINS_REAIS, VL_COFINS, COD_CTA, 

>> ID_C100) VALUES ((SELECT GEN_ID(GEN_TB_C170_ID, 1) FROM RDB$DATABASE), 

>> '00.000.000/0000-00', 'Janeiro', '2010', 'C170', 1, '42196', NULL, '16', 

>> 'UN', '606.4', '0', '0', '060', '1403', '1403', '0', '0', '0', '0', '0', 

>> '0', '0', NULL, NULL, '0', '0', '0', '04', '0', '1.65', NULL, NULL, '0', 

>> '04', '0', '7.6', NULL, NULL, '0', '604', (SELECT MAX(ID)FROM TB_C100)); 

>> 

>> Gostei do resultado ate porque com MAX() o maior ID da tabela e com
GEN_ID 

>> poderia ter problemas caso por algum motivo o 

>> INSERT da TB_C700 não fosse executado corretamente, 

>> muito obrigado pela dica, fico te devendo uma, valeu... 

>> 

>> 

>> -------------------------------------------------- 

>> From: "andre conrado" <acf.andre em gmail.com> 

>> Sent: Wednesday, February 02, 2011 2:07 PM 

>> To: "FireBase" <lista em firebase.com.br> 

>> Subject: Re: [firebase-br] RES: Ajuda com SQL (Insert Into) 

>> 

>>> Diego, ainda qto ao ID, vc não precisa usar o SELECT GEN_ID no INSERT, 

>>> pode usar o GEN_ID sozinho como se faz com uma outra função qualquer. 

>>> 

>>> Agora, eu acredito q seria mais seguro se vc buscasse na tabela 

>>> TB_C100 o último usando um SELECT MAX(ID) FROM TB_C100. Isso evitaria 

>>> q numa possível manutenção futura (onde a forma de atualização do 

>>> campo ID mudasse) a inserção ficasse inconsistente. 

>>> 

>>> Em 28/01/11, Carlos Alberto<cacgodinho em gmail.com> escreveu: 

>>>> Diego, 

>>>> 

>>>> Tive problemas com inserção de datas no FB mas consegui resolver. 

>>>> Faça da seguinte forma que funciona redondo... 

>>>> 

>>>> sqlstr="INSERT INTO TABELA (Codigo, Data) VALUES ('" & varCodigo & '", 
" 

>> 

>>>> & 

>>>> format(varData,"dd.mm.yyyy") & "') 

>>>> 

>>>> Espero que ajude... 

>>>> 

>>>> Carlos Alberto. 

>>>> 

>>>> ----- Original Message ----- 

>>>> From: "Diego Maccari" <diegomaccari em ig.com.br> 

>>>> To: "FireBase" <lista em firebase.com.br> 

>>>> Sent: Friday, January 28, 2011 9:13 AM 

>>>> Subject: Re: [firebase-br] RES: Ajuda com SQL (Insert Into) 

>>>> 

>>>> 

>>>> Julio muito obrigado pela dica mas este erro eu já consertei aqui o 

>>>> problema 

>>>> estava na falta de uma coluna não era o SELECT GEN_ID 

>>>> o firebird aceita varios select's dentro do insert. 

>>>> 

>>>> mas pra minha felididade agora estou com problema em um campo DATE que 

>>>> não 

>>>> aceita um determinado valor exemplo = '10/01/2011' 

>>>> como seria a maneira correta de inserir datas no fb ? 

>>>> 

>>>> -------------------------------------------------- 

>>>> From: "Julio Cezar - Desenvolvimento" <juliocezarsilva em sfox.com.br> 

>>>> Sent: Friday, January 28, 2011 8:17 AM 

>>>> To: "'FireBase'" <lista em firebase.com.br> 

>>>> Subject: [firebase-br] RES: Ajuda com SQL (Insert Into) 

>>>> 

>>>>> Não sei se ajuda mas se ao inserir na tabela TB_C100_ID vc usar da 

>>>>> seguinte 

>>>>> forma. 

>>>>> 

>>>>> INSERT INT TB_C100_ID (SEUS CAMPOS) VALUES (OS VALORES) RETURNING O ID


>>>>> DA 

>>>>> TABELA 

>>>>> 

>>>>> Você têm o id que inseriu nessa tabela disponivel em seu recordset 

>>>>> depois 

>>>>> basta fazer o insert na outra tabela, desta forma não funcionaria não?


>>>>> 

>>>>> 

>>>>> 

>>>>> 

>>>>> 

>>>>> 

>>>>> 

>>>>> 

>>>>> 

>>>>> 

>>>>> 

>>>>> Nada substitui o ser humano! Inst. Faber Ludens 

>>>>> -----Mensagem original----- 

>>>>> De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com
br] 

>>>>> Em 

>>>>> nome de Jeter Rabelo Ferreira 

>>>>> Enviada em: quinta-feira, 27 de janeiro de 2011 17:52 

>>>>> Para: FireBase 

>>>>> Assunto: Re: [firebase-br] Ajuda com SQL (Insert Into) 

>>>>> 

>>>>> GEN_ID(GEN_TB_C100_ID, 1) 

>>>>> 

>>>>> 2011/1/27 Diego Maccari dos Santos <diegomaccari em ig.com.br> 

>>>>> 

>>>>>> Ajuda com SQL (Insert Into) 

>>>>>> 

>>>>>> Pessol estou tentando inserir um registro no BD (Firebird) onde o 1º 

>>>>>> campo 

>>>>>> ID é chave primaria que recebe o valor de um generator e o ultimo
campo 

>> 

>>>>>> é 

>>>>>> um 

>>>>>> campo INTEIRO no qual estou inserindo o valor da chve primaria de
outra 

>>>>>> tabela porem este campo não é chave estrangeira estou tentando pegar
o 

>>>>>> valor 

>>>>>> do generator e inserir no campo não está dando certo uso o seguinte 

>>>>>> SQL: 

>>>>>> 

>>>>>> INSERT INTO TB_C170 (ID, CNPJ_IMP, MES_IMP, ANO_IMP, REG, NUM_ITEM, 

>>>>>> COD_ITEM, DESCR_COMPL, QTD, UNID, VL_ITEM, VL_DESC, IND_MOV, CST_ICMS
 

>>>>>> CFOP, 

>>>>>> COD_NAT, VL_BC_ICMS, ALIQ_ICMS, VL_ICMS, VL_BC_ICMS_ST, ALIQ_ST, 

>>>>>> VL_ICMS_ST, 

>>>>>> IND_APUR, CST_IPI, COD_ENQ, VL_BC_IPI, ALIQ_IPI, VL_IPI, CST_PIS, 

>>>>>> VL_BC_PIS, 

>>>>>> ALIQ_PIS, QUANT_BC_PIS, ALIQ_PIS_REAIS, VL_PIS, CST_COFINS, 

>>>>>> VL_BC_COFINS, 

>>>>>> ALIQ_COFINS, QUANT_BC_COFINS, ALIQ_COFINS_REAIS, VL_COFINS, COD_CTA, 

>>>>>> ID_C100) VALUES ((SELECT GEN_ID(GEN_TB_C170_ID, 1) FROM RDB$DATABASE)
 

>>>>>> '00.000.000/0000-00', 'Janeiro', '2010', 'C170', , '73695', NULL, '49
, 

>>>>>> 'UN', '269,5', '0', '0', '010', '1403', '1403', '0', '7', '0', '0', 

>>>>>> '0', 

>>>>>> '0', '0', NULL, NULL, '0', '0', '0', '01', '269,5', '1,65', NULL,
NULL, 

>>>>>> '4,45', '01', '269,5', '7,6', NULL, NULL, '20,48', '604', (SELECT 

>>>>>> GEN_ID(GEN_TB_C100_ID, 0) FROM RDB$DATABASE)); 

>>>>>> 

>>>>>> Onde está o erro ??? 

>>>>>> Alguém pode ajudar? 

>>>>>> 

>>>>>> Acho que o erro está no ultimo SELECT GEN_ID que coloquei pra pegar o


>>>>>> ID 

>>>>>> atual da outra tabela, a tabela chama TB_C100 e o Generation 

>>>>>> GEN_TB_C100_ID. 

>>>>>> ______________________________________________ 

>>>>>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br 

>>>>>> Para saber como gerenciar/excluir seu cadastro na lista, use: 

>>>>>> http://www.firebase.com.br/fb/artigo.php?id=1107 

>>>>>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa 

>>>>>> 

>>>>> 

>>>>> 

>>>>> 

>>>>> -- 

>>>>> []'s 

>>>>> Jéter Rabelo Ferreira 

>>>>> ______________________________________________ 

>>>>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br 

>>>>> Para saber como gerenciar/excluir seu cadastro na lista, use: 

>>>>> http://www.firebase.com.br/fb/artigo.php?id=1107 

>>>>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa 

>>>>> 

>>>>> 

>>>>> ______________________________________________ 

>>>>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br 

>>>>> Para saber como gerenciar/excluir seu cadastro na lista, use: 

>>>>> http://www.firebase.com.br/fb/artigo.php?id=1107 

>>>>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa 

>>>> 

>>>> 

>>>> ______________________________________________ 

>>>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br 

>>>> Para saber como gerenciar/excluir seu cadastro na lista, use: 

>>>> http://www.firebase.com.br/fb/artigo.php?id=1107 

>>>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa 

>>>> 

>>>> 

>>>> ______________________________________________ 

>>>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br 

>>>> Para saber como gerenciar/excluir seu cadastro na lista, use: 

>>>> http://www.firebase.com.br/fb/artigo.php?id=1107 

>>>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa 

>>>> 

>>> 

>>> 

>>> -- 

>>> Um Abraço, 

>>> André Conrado. 

>>> 

>>> 055 21 9176-7013 - Claro 

>>> 055 21 9896-5449 - Vivo (apenas mensagens SMS) 

>>> 

>>> ______________________________________________ 

>>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br 

>>> Para saber como gerenciar/excluir seu cadastro na lista, use: 

>>> http://www.firebase.com.br/fb/artigo.php?id=1107 

>>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa 

>> 

>> 

>> ______________________________________________ 

>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br 

>> Para saber como gerenciar/excluir seu cadastro na lista, use: 

>> http://www.firebase.com.br/fb/artigo.php?id=1107 

>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa 

>> 

>> 

>> ______________________________________________ 

>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br 

>> Para saber como gerenciar/excluir seu cadastro na lista, use: 

>> http://www.firebase.com.br/fb/artigo.php?id=1107 

>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa 

>> 

> 

> 

> -- 

> Um Abraço, 

> André Conrado. 

> 

> 055 21 9176-7013 - Claro 

> 055 21 9896-5449 - Vivo (apenas mensagens SMS) 

> 

> ______________________________________________ 

> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br 

> Para saber como gerenciar/excluir seu cadastro na lista, use: http://www
firebase.com.br/fb/artigo.php?id=1107 

> Para consultar mensagens antigas: http://firebase.com.br/pesquisa 

> 

 

______________________________________________ 

FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br 

Para saber como gerenciar/excluir seu cadastro na lista, use: http://www
firebase.com.br/fb/artigo.php?id=1107 

Para consultar mensagens antigas: http://firebase.com.br/pesquisa




Mais detalhes sobre a lista de discussão lista