Valdir Posted August 19, 2014 Report Share Posted August 19, 2014 Pessoal... Desculpem ae... Estou tentando aprender a migrar para SQL, porém como um expert asno que sou, não consigo nem fazer uma simples gravação na Base de Dados que criei. Testei e já consegui fazer a conexão perfeitamente, porém não grava nem a pau Juvenal.... Sem querer abusar, alguém poderia me dizer o que está errado neste Código ? Brigadão. #Include "FiveWin.ch" #Include "Directry.Ch" // Para Manipular o Diretorio #Include "Valdir.ch" #include 'sqllib.ch' #include 'ord.ch' #Define SW_HIDE 0 // &H0 #Define SW_SHOW 5 // &H5 #define FO_MOVE 0x0001 #define FO_COPY 0x0002 #define FO_DELETE 0x0003 #define FO_RENAME 0x0004 #define HKEY_LOCAL_MACHINE 2147483650 // 0x80000002 #define CRLF Chr(13)+Chr(10) ANNOUNCE RDDSYS REQUEST OrdKeyNo, OrdKeyCount, OrdKeyGoto REQUEST DBFCDX, DBFFPT REQUEST SQLLIB REQUEST MySQL REQUEST HB_LANG_PT REQUEST HB_CODEPAGE_PT850 //--------------------------------------------------------------------------// Function Main() LOCAL oBar, oBmp, oFont, lSai:=.F., lSair:=.F.,lRep:=.F. local oIni hBorland:= LoadLibrary('BWCC32.DLL') // Configura‡Æo Para Todo o Sistema RDDSETDEFAULT( "DBFCDX" ) SET DATE TO BRITISH SET EPOCH TO 1950 SET CENTURY ON SET DATE FORMAT TO "DD/MM/YYYY" SET SOFTSEEK ON SET WRAP ON SETCANCEL( .F. ) SET CONFIRM OFF SET DELETED ON SET ESCAPE ON SET EXCLUSIVE OFF SET MULTIPLE ON //->Defaults da Lingua Portuguesa do [x]Harbour HB_LANGSELECT( 'PT' ) // Default language is now Portuguese HB_SETCODEPAGE( "PT850" ) //-> Carrega os Recursos da DLL->BWCC32.DLL -> Para Usar Recursos Borland BWCCRegister( GetResources( ) ) /* * Utilizamos este commando para se conectar ao servidor SQL via TCP/IP */ SQL CONNECT ON 'localhost'; // Nome da estação ou IP do micro onde o MySQL está rodando PORT 3306; // Numero da porta, onde o servidor SQL está escutando DATABASE 'teste'; USER 'root'; PASSWORD 'senha' ; OPTIONS SQL_NO_WARNING ; LIB 'MySQL' /* * Houve algum erro na conexao? */ IF SQL_ErrorNO() > 0 Alert( "Não foi possível conectar ao banco de dados !;"+; "Informe esta mensagem ao suporte : ;;"+; SQL_ErrorMsg() ) QUIT ELSE ? "CONECTADO" ENDIF rddSetDefault('mysql') USE CONTROLE ALIAS CTR EXCLUSIVE NEW VIA "DBFCDX" dbSelectArea("CTR") CTR->(DBGOTOP()) REPLACE CTR->COMP WITH "TESTE NO ARQUIVO DBF" CLOSE CTR BEGIN TRANSACTION USE CONTROLE ALIAS CTR NEW VIA "MYSQL" DBRLOCK() REPLACE CTR->COMP WITH "TESTE NA BASE DE DADOS SQL" END TRANSACTION CLOSE ALL ? "Finalizando o Sistema..." QUIT RETURN NIL //----------------------------------------------------------------------------// DLL32 FUNCTION BWCCRegister( hInst AS LONG ) AS WORD PASCAL LIB "BWCC32.DLL" //----------------------------------------------------------------------------- Mensagem de erro : Application =========== Path and name: C:\fwh1201\SAMPLES\TESTSQL.exe (32 bits) Size: 1,994,752 bytes Compiler version: xHarbour build 1.2.1 Intl. (SimpLex) (Rev. 9421) FiveWin Version: FWHX 11.12 Windows version: 6.1, Build 7601 Service Pack 1 Time from start: 0 hours 0 mins 3 secs Error occurred at: 19/08/2014, 15:26:04 Error description: Error SQLLIB/1001 MySQL RDD: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'TYPE=InnoDB' at line 1 Stack Calls =========== Called from: .\sql_error.prg => SQL_ERROR( 165 ) Called from: => DBUSEAREA( 0 ) Called from: TESTSQL.prg => MAIN( 86 ) System ====== CPU type: Intel® Celeron® CPU 450 @ 2.20GHz 2200 Mhz Hardware memory: 347 megs Free System resources: 90 % GDI resources: 90 % User resources: 90 % Windows total applications running: 17 1 , C:\Program Files\BrOffice.org 3\program\soffice.bin 2 , C:\Program Files\Gadwin Systems\PrintScreen\PrintScreen.exe 3 , C:\Program Files\Google\Chrome\Application\chrome.exe 4 , C:\Windows\Explorer.EXE 5 , C:\Windows\System32\hkcmd.exe 6 CiceroUIWndFrame, C:\Windows\system32\taskhost.exe 7 DWM Notification Window, C:\Windows\system32\Dwm.exe 8 FWH1201, C:\Windows\system32\cmd.exe 9 JavaUpdate SysTray Icon, 10 MCI command handling window, C:\Program Files\AVAST Software\Avast\avastui.exe 11 MSCTFIME UI, C:\Windows\system32\conhost.exe 12 PersistWndName, C:\Windows\System32\igfxpers.exe 13 PowerEventNotifierWindow, C:\Windows\System32\aetcrss1.exe 14 Salvar, C:\UTIL\EDITPAD.EXE 15 SearchSettings{FE4559D7-F7D6-4905-99B3-9BB1DDA607C5}, C:\Program Files\Common Files\Spigot\Search Settings\SearchSettings.exe 16 igfxtrayWindow, C:\Windows\System32\igfxtray.exe 17 {A7E495BF-9589-4a6e-8479-DDA2D8D3C05F}, C:\Program Files\Google\GoogleToolbarNotifier\GoogleToolbarNotifier.exe Variables in use ================ Procedure Type Value ========================== SQL_ERROR Param 1: N 1001 Param 2: C "MySQL RDD: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'TYPE=InnoDB' at line 1" Param 3: L .T. Local 1: L .F. Local 2: C "" Local 3: N 0 Local 4: N 1 Local 5: O Class: ERROR Local 6: U DBUSEAREA Param 1: L .T. Param 2: C "MYSQL" Param 3: C "CONTROLE" Param 4: C "CTR" Param 5: U Param 6: L .F. MAIN Local 1: U Local 2: U Local 3: U Local 4: L .F. Local 5: L .F. Local 6: L .F. Local 7: U Linked RDDs =========== DBF DBFFPT DBFBLOB DBFCDX MYSQL DataBases in use ================ 1: => CTR RddName: MYSQL ============================== RecNo RecCount BOF EOF 1 0 .T. .T. Indexes in use TagName Relations in use Classes in use: =============== 1 ERROR 2 HASHENTRY 3 HBCLASS 4 HBOBJECT 5 TREG32 Memory Analysis =============== 169 Static variables Dynamic memory consume: Actual Value: 0 bytes Highest Value: 0 bytes Quote Link to comment Share on other sites More sharing options...
netsys Posted August 19, 2014 Report Share Posted August 19, 2014 Fala Valdir Tudo bem? Segue uma dica: cSql:="Update controle set comp='TESTE NA BASE DE DADOS SQL' where sql_rowid=1" SqlExecute(cSql) where sql_rowid=1 ------> Vai gravar no 1o. registro se tiver 1 no campo sql_rowid. Se não colocar a clausula WHERE, ele grava em todos os registros da tabela. Depois abra o DB com o HeidiSql e veja que gravou mesmo. abs Alberto - SP Quote Link to comment Share on other sites More sharing options...
Ariston Santos Posted August 20, 2014 Report Share Posted August 20, 2014 Ou tente assim: USE CONTROLE ALIAS CTR EXCLUSIVE NEW VIA "DBFCDX" BEGIN TRANSACTION CTR->(dbAppend()) // Se está salvando um novo registro, não notei esta instrução básica REPLACE CTR->COMP WITH "TESTE NA BASE DE DADOS SQL" END TRANSACTION CLOSE ALL Alguns detalhes sobre seu código acima: // Comentando seu código USE CONTROLE ALIAS CTR EXCLUSIVE NEW VIA "DBFCDX" dbSelectArea("CTR") // Desnecessário. Você acabou de abrir a tabela, portanto, ela já é a tabela selecionada atualmente. CTR->(DBGOTOP()) // Desnecessário. Poderia ser um DBAPPEND() REPLACE CTR->COMP WITH "TESTE NO ARQUIVO DBF" // Se não houve DBAPPEND não vai salvar nada, a menos que em sua tabela ja tenha um ou mais registros, o que vai acontecer conforme o Alberto - SP falou acima. CLOSE CTR // Fechou a tabela BEGIN TRANSACTION // Aqui você está iniciando uma TRANSACTION sendo que a tabela está fechada. Incorreto. USE CONTROLE ALIAS CTR NEW VIA "MYSQL" // Aqui você abre a tabela após o BEGIN TRANSACTION. Tem que ser o contrário. Primeiro abra a tabela. DBRLOCK() // Poderia ser um DBAPPEND, a menos que deseje alterar os dados da tabela em vez de inserir um novo registro. REPLACE CTR->COMP WITH "TESTE NA BASE DE DADOS SQL" END TRANSACTION CLOSE ALL Quote Link to comment Share on other sites More sharing options...
Valdir Posted August 20, 2014 Author Report Share Posted August 20, 2014 Olá amigos Alberto e Ariston Santos... Obrigado por responder. Fala Valdir Tudo bem? Segue uma dica: cSql:="Update controle set comp='TESTE NA BASE DE DADOS SQL' where sql_rowid=1" SqlExecute(cSql) where sql_rowid=1 ------> Vai gravar no 1o. registro se tiver 1 no campo sql_rowid. Se não colocar a clausula WHERE, ele grava em todos os registros da tabela. Depois abra o DB com o HeidiSql e veja que gravou mesmo. abs Alberto - SP Ou tente assim: USE CONTROLE ALIAS CTR EXCLUSIVE NEW VIA "DBFCDX" BEGIN TRANSACTION CTR->(dbAppend()) // Se está salvando um novo registro, não notei esta instrução básica REPLACE CTR->COMP WITH "TESTE NA BASE DE DADOS SQL" END TRANSACTION CLOSE ALL Alguns detalhes sobre seu código acima: // Comentando seu código USE CONTROLE ALIAS CTR EXCLUSIVE NEW VIA "DBFCDX" dbSelectArea("CTR") // Desnecessário. Você acabou de abrir a tabela, portanto, ela já é a tabela selecionada atualmente. CTR->(DBGOTOP()) // Desnecessário. Poderia ser um DBAPPEND() REPLACE CTR->COMP WITH "TESTE NO ARQUIVO DBF" // Se não houve DBAPPEND não vai salvar nada, a menos que em sua tabela ja tenha um ou mais registros, o que vai acontecer conforme o Alberto - SP falou acima. CLOSE CTR // Fechou a tabela BEGIN TRANSACTION // Aqui você está iniciando uma TRANSACTION sendo que a tabela está fechada. Incorreto. USE CONTROLE ALIAS CTR NEW VIA "MYSQL" // Aqui você abre a tabela após o BEGIN TRANSACTION. Tem que ser o contrário. Primeiro abra a tabela. DBRLOCK() // Poderia ser um DBAPPEND, a menos que deseje alterar os dados da tabela em vez de inserir um novo registro. REPLACE CTR->COMP WITH "TESTE NA BASE DE DADOS SQL" END TRANSACTION CLOSE ALL R. Infelizmente também não funfou. Estou achando que o problema está na versão da SqlLib que estou usando. Veja a mensagem de erro: "Error description: Error SQLLIB/1001 MySQL RDD: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'TYPE=InnoDB' at line 1" O que vocês acham ? Um abraço, Quote Link to comment Share on other sites More sharing options...
Marca Posted August 20, 2014 Report Share Posted August 20, 2014 Olá amigos Alberto e Ariston Santos... Obrigado por responder. R. Infelizmente também não funfou. Estou achando que o problema está na versão da SqlLib que estou usando. Veja a mensagem de erro: "Error description: Error SQLLIB/1001 MySQL RDD: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'TYPE=InnoDB' at line 1" O que vocês acham ? Um abraço, Olá Valdir Pode ser da sua versao da lib sim A versão free não dava suporte a sintax xbase, funcionava somente com comandos nativos do sql. Verifique se a sua versão é a que aceita comandos xbase. Me parece que o Renato disponibilizou no forum dele a ultima versão da lib. Quote Link to comment Share on other sites More sharing options...
Valdir Posted August 20, 2014 Author Report Share Posted August 20, 2014 Boas... Obrigado por responder. Olá Valdir Pode ser da sua versao da lib sim A versão free não dava suporte a sintax xbase, funcionava somente com comandos nativos do sql. Verifique se a sua versão é a que aceita comandos xbase. Me parece que o Renato disponibilizou no forum dele a ultima versão da lib. R. A minha é a versão comercial, porém não sei se estou usando a última versão disponibilizada pelo Vailton. Irei verificar. Um abraço. Quote Link to comment Share on other sites More sharing options...
joaosolution Posted August 20, 2014 Report Share Posted August 20, 2014 Valdir Bom dia Como você criou as tabelas no banco de dados? usou DbCreate? Att João Bosco Quote Link to comment Share on other sites More sharing options...
Valdir Posted August 20, 2014 Author Report Share Posted August 20, 2014 Olá João... Obrigado por responder. Valdir Bom dia Como você criou as tabelas no banco de dados? usou DbCreate? Att João Bosco R. Utilizei a ferramenta Dbf2Sql, versão 3.0, do amigo Kleyber Derek para criar o meu banco de dados com base nos meus dbfs. Baixei a última versão disponibilizada pelo Vailton e ao refazer a compilação, está aparecendo um erro : Error : _dv_memcpy referenciada em SqlLiv_api. Tens ideia do que significa isso ? Obrigado Quote Link to comment Share on other sites More sharing options...
emotta Posted August 21, 2014 Report Share Posted August 21, 2014 Valdir, se a sua versão é a comercial pq não busca o suporte direto com eles? Acho que lá é a melhor opção, eu sempre que preciso de algo do SQLRDD obtenho retorno do suporte... Boas... Obrigado por responder. R. A minha é a versão comercial, porém não sei se estou usando a última versão disponibilizada pelo Vailton. Irei verificar. Um abraço. Quote Link to comment Share on other sites More sharing options...
SAOliveira Posted August 21, 2014 Report Share Posted August 21, 2014 Eduardo, acho que ele tá falando de SqlLib. Outra coisa: entre em contato pelo meu email sergio@oho.com.br, preciso falar sobre seu sistema. Grato. Quote Link to comment Share on other sites More sharing options...
oliveiros Posted August 21, 2014 Report Share Posted August 21, 2014 Olá, Vc está falando da SQLLib? Em caso afirmativo o problema está na compatibilidade de versão do MYSQL com a SQLLib. Salvo engano, até a versão 5.27.0, que eu uso com a SQLLib 1.7, não havia problema. A partir da 5.1 começou a incompatibilidade. Você precisará mandar os comandos em MYSQL para o banco de dados. O caso que você relatou no "post" troque TYPE=InnoDB por ENGINE=InnoDB. Att., Junior Quote Link to comment Share on other sites More sharing options...
kapiaba Posted August 22, 2014 Report Share Posted August 22, 2014 http://forums.fivetechsupport.com/viewtopic.php?f=6&t=28917&hilit=sql Quote Link to comment Share on other sites More sharing options...
emotta Posted August 22, 2014 Report Share Posted August 22, 2014 agora que percebi... pelo que eu saiba a SQLLIB não é compativel com a versão comercial do xHarbour... Uma vez vi uma discussão na news do xharbour sobre isso... nao sei os motivos, o Vailton que é o pai da criança pode saber o motivo... Olá, Vc está falando da SQLLib? Em caso afirmativo o problema está na compatibilidade de versão do MYSQL com a SQLLib. Salvo engano, até a versão 5.27.0, que eu uso com a SQLLib 1.7, não havia problema. A partir da 5.1 começou a incompatibilidade. Você precisará mandar os comandos em MYSQL para o banco de dados. O caso que você relatou no "post" troque TYPE=InnoDB por ENGINE=InnoDB. Att., Junior Quote Link to comment Share on other sites More sharing options...
Valdir Posted August 22, 2014 Author Report Share Posted August 22, 2014 Amigos... Agradeço à participação de todos em tentar ajudar a solucionar essas primeiras dúvidas. Com a ajuda do meu grande amigo Jose Carlos Eonner, comprovamos que o problema está relacionado com a versão da SqlLib e provavelmente também com a versão da Mysql. Acredito que terei que buscar outras alternativas. Mais uma vez. Obrigado à todos. Um abraço 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.