vmolina Posted January 24, 2012 Report Share Posted January 24, 2012 Bom dia pesssoal, Montei um função no meu fonte para inserir dados no BD Mysql através de formulário. O que será que está havendo, pois não consigo inserir os dados no BD? Desde já agradeço. Segue código: Function Cad_Func(oBrw,aResult) Local oDlg,lGrava:=.f. Local oGetLogin,oGetTelefone,oGetEndereco,oGetSenha Local cLogin:=space(25),cTelefone:=space(10),cEndereco:=space(20),cSenha:=space(10) DEFINE DIALOG oDlg RESOURCE "cad_func" TITLE "Cadastrar Funcionário" ICON "vitor_icone.ico" REDEFINE GET oGetLogin VAR cLogin ID 105 OF oDlg REDEFINE GET oGetTelefone VAR cTelefone ID 106 OF oDlg REDEFINE GET oGetEndereco VAR cEndereco ID 107 OF oDlg REDEFINE GET oGetSenha VAR cSenha ID 108 OF oDlg REDEFINE BUTTON ID 109 OF oDlg ACTION (lGrava:=.t.,oDlg:end()) REDEFINE BUTTON ID 110 OF oDlg ACTION (lGrava:=.f.,oDlg:end()) ACTIVATE DIALOG oDlg CENTERED IF lGrava:=.f. RETURN ENDIF IF lGrava:=.t. sql_cmd = "INSERT INTO cadastro (Login,Telefone,Endereco,Senha) VALUES (cLogin,cTelefone,cEndereco,cSenha)" BEGIN TRANSACTION SQLExecute(sql_cmd) END TRANSACTION COMMIT TRANSACTION ENDIF Return Nil Att Vitor Molina vitormolina@gmail.com FW 10.12 + xHarbour 1.2.1 (6717) | BCC 5.82 Editado por - vmolina on 24/01/2012 15:08:27 Quote Link to comment Share on other sites More sharing options...
vmolina Posted January 24, 2012 Author Report Share Posted January 24, 2012 Bom dia pesssoal, Montei um função no meu fonte para inserir dados no BD Mysql através de formulário. O que será que está havendo, pois não consigo inserir os dados no BD? Desde já agradeço. Segue código: Function Cad_Func(oBrw,aResult) Local oDlg,lGrava:=.f. Local oGetLogin,oGetTelefone,oGetEndereco,oGetSenha Local cLogin:=space(25),cTelefone:=space(10),cEndereco:=space(20),cSenha:=space(10) DEFINE DIALOG oDlg RESOURCE "cad_func" TITLE "Cadastrar Funcionário" ICON "vitor_icone.ico" REDEFINE GET oGetLogin VAR cLogin ID 105 OF oDlg REDEFINE GET oGetTelefone VAR cTelefone ID 106 OF oDlg REDEFINE GET oGetEndereco VAR cEndereco ID 107 OF oDlg REDEFINE GET oGetSenha VAR cSenha ID 108 OF oDlg REDEFINE BUTTON ID 109 OF oDlg ACTION (lGrava:=.t.,oDlg:end()) REDEFINE BUTTON ID 110 OF oDlg ACTION (lGrava:=.f.,oDlg:end()) ACTIVATE DIALOG oDlg CENTERED IF lGrava:=.f. RETURN ENDIF IF lGrava:=.t. sql_cmd = "INSERT INTO cadastro (Login,Telefone,Endereco,Senha) VALUES (cLogin,cTelefone,cEndereco,cSenha)" BEGIN TRANSACTION SQLExecute(sql_cmd) END TRANSACTION COMMIT TRANSACTION ENDIF Return Nil Att Vitor Molina vitormolina@gmail.com FW 10.12 + xHarbour 1.2.1 (6717) | BCC 5.82 Editado por - vmolina on 24/01/2012 15:08:27 Quote Link to comment Share on other sites More sharing options...
gss200610 Posted January 24, 2012 Report Share Posted January 24, 2012 BEGIN TRANSACTION SQLExecute(sql_cmd) END TRANSACTION COMMIT TRANSACTION --- nao seria assim: essa ordem do commit ai ta errada. primeiro inicia tansacao, comita, finaliza. veja se é isso. BEGIN TRANSACTION SQLExecute(sql_cmd) COMMIT TRANSACTION END TRANSACTION Gilmar Silva Santos Programador - Goiânia Go Não Recuarei, Nada Temerei, Comigo Está o Senhor. Email : gilmarss2010@gmail.com FWH 10.8, DBF, MED EDITOR, UESTUDIO, XHB 1.2, BCC 5.82 Quote Link to comment Share on other sites More sharing options...
Jmsilva Posted January 24, 2012 Report Share Posted January 24, 2012 Amigo, aparentemente a linha abaixo está incorreta: sql_cmd = "INSERT INTO cadastro (Login,Telefone,Endereco,Senha) VALUES (cLogin,cTelefone,cEndereco,cSenha)" tente assim: sql_cmd = "INSERT INTO cadastro (Login,Telefone,Endereco,Senha) VALUES ('"+cLogin+"','"+cTelefone+"','"+cEndereco+"','"+cSenha+");" Quote Link to comment Share on other sites More sharing options...
Erciley Junior Posted January 24, 2012 Report Share Posted January 24, 2012 Lembre-se sempre de olhar o arquivo SQLLOG.TXT na pasta do seu executável, nele será gerado todo erro que o sql retornar. Tem como você visualizar pelo sistema também, está no doc. Erciley Junior (FWH8.01 + SQLLIB 1.9d + xHB 1.10 + xDev 0.65 + @SAY) NÃO ABANDONE O POST, QUEREMOS SABER SE SUA DÚVIDA/PROBLEMA TEVE SOLUÇÃO Quote Link to comment Share on other sites More sharing options...
vmolina Posted January 24, 2012 Author Report Share Posted January 24, 2012 Boa tarde pessoal, obrigado a todos pelas dicas. 1ºgss200610 - Troquei a posição da linhas COMIT e END TRANSACTION. 2ºJmsilva - Amigo só consegui enviar os dados depois que modifiquei os dados do VALUES ('"+cLogin+"','"+cTelefone+"','"+cEndereco+"','"+cSenha+"'). 3ºeco_fw - Mais um vez orbigado pela dica Eco, ficou muito mais fácil encontrar o erro. Att Vitor Molina vitormolina@gmail.com FW 10.12 + xHarbour 1.2.1 (6717) | BCC 5.82 | Workshop V4.5 Quote Link to comment Share on other sites More sharing options...
Erciley Junior Posted January 24, 2012 Report Share Posted January 24, 2012 Bom, o fórum seria um lugar mais feliz se todos voltassem para dizer se a dica deu certo ou não como você fez. =) Bom vmolina, a dica do Jmsilva resolveu seu caso, mas é importante que você entenda o porque que a forma dele resolveu e o porque a sua forma estava incorreta. Pelo jeito você está usando a sqllib certo? Quando o campo da tabela for numérico, utilize a função SQLNTRIM, quando caracter, utilize SQLSTR, quando DATA, utilize a SQLDATE. Todas estas funções estão na documentação da LIB. exemplo cSQL:='INSERT INTO tbCLI (Cod,Nome,Data_Cad) VALUES ('+SQLNTRIM(nVarCodigo)+','+SQLSTR(cVarNome)+','+SQLDATE(dVarData)+')' sqlExecute(cSQL)id=code>id=code>Erciley Junior (FWH8.01 + SQLLIB 1.9d + xHB 1.10 + xDev 0.65 + @SAY) NÃO ABANDONE O POST, QUEREMOS SABER SE SUA DÚVIDA/PROBLEMA TEVE SOLUÇÃO Quote Link to comment Share on other sites More sharing options...
vmolina Posted January 24, 2012 Author Report Share Posted January 24, 2012 Sempre agradeço as dicas e digo se deu certo, até porque outros poderão vir com a mesma dúvida e assim fica mais fácil aprender quando vc vê que o tópico foi resolvido. Comecei a usar a SQLib a pouco tempo, aliás a programação fivewin comecei tb a pouco tempo. Agora só tira uma dúvida minha: se tem as ações especÃficas na SQLIB como vc citou SQLNTRIM,SQLSTR... por que que o meu funcionou só usando '"+cLogin+"'...? pois exite no meu formulário campos com caracter, numérico... Att Vitor Molina vitormolina@gmail.com FW 10.12 + xHarbour 1.2.1 (6717) | BCC 5.82 | Workshop V4.5 Quote Link to comment Share on other sites More sharing options...
Erciley Junior Posted January 24, 2012 Report Share Posted January 24, 2012 É que essas funções da SQLLIB, são usadas pra você não ter que ficar colocando esse monte de aspas. seu código deu certo pois você formou a string corretamente (após a dica do amigo do fórum) se você for inserir um registro direto no banco terá que escrever o comando assim: id=code>id=code>como os campos LOGIN e SENHA são caracteres, você tem que colocar os valores envoltos por aspas, como acima. quando você somou a string no seu programa, você colocou essas aspas na UNHA as funções da lib faz isso pra você quando o campo é caracter se você tivesse um campo numérico, daria erro se você fizesse isso: id=code>id=code>pois somar caracter com número dá erro o certo seria id=code>id=code>ou você também poderia usar a função SQLNTRIM, que faz esse ALLTRIM(STR nela. bom, espero não ter lhe confundido ^^ Erciley Junior (FWH8.01 + SQLLIB 1.9d + xHB 1.10 + xDev 0.65 + @SAY) NÃO ABANDONE O POST, QUEREMOS SABER SE SUA DÚVIDA/PROBLEMA TEVE SOLUÇÃO Quote Link to comment Share on other sites More sharing options...
vmolina Posted January 25, 2012 Author Report Share Posted January 25, 2012 Bom dia Eco_fw, Clareou as idéias, obrigado pela explicação. Vitor Molina vitormolina@gmail.com FW 10.12 + xHarbour 1.2.1 (6717) | BCC 5.82 | Workshop V4.5 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.