Jump to content
Fivewin Brasil

A saga "SQL"...


Valdir

Recommended Posts

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
Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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,
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...