Jump to content
Fivewin Brasil

SQLRDD COM MYSQL


edutraini

Recommended Posts

Sobre jogar os DBF, veja esse app de exemplo abaixo que consegue fazer isso para você.

http://www.pctoledo.com.br/forum/filebase.php?d=1&id=158&searchword=sql&what=s&page=1

Sobre MARIADB vs MYSQL, eu ficaria com MARIADB por causa da licença de uso do MYSQL, até onde eu sei, pode ser usado desde que o projeto seja de código aberto.

Sobre SQLRDD, fuja dele o quanto antes, vai ficar preso no xHarbour e, isso é um tiro no pé, o Harbour está mais evoluído.

Link to comment
Share on other sites

//==============================================================================
Procedure UpLoad()
   Local aFiles,cFile,cTable,nTime,cRDD,oErr,aDBF,nI

   Set AutOpen OFF
   aDBF := Directory(DefPath()+"\arq\*.DBF")
   
   aFiles :={}
   For nI:=1 TO Len(aDBF)
      AAdd(aFiles,Trim(aDBF[nI,1]))
   Next

   //Sys_Meter(1,0,"Importando o arquivo")
   nTime:=Seconds()
   For Each cFile IN aFiles
      cTable := Lower(cFileNoExt(cFile))
      If File(cFile+".dbf") .and. !SR_ExistTable(cFile)
         Try
            cRDD := IIF(File(cFile+".dbt"),"DBFCDX","DBFNTX")
            DBUseArea(.T.,cRDD,cFile,"TEMP",.F.)
            If LastRec() > 0
               //Sys_Meter(2,LastRec(),"Importando o arquivo "+cFile+".DBF")
               FastTurbo(cTable)
            Endif
            DBCloseArea()
         Catch oErr
            XBrowser oErr title cFile
            DBCloseArea()
         End
      Endif
   Next
   MsgStop(SecToTime(Seconds()-nTime),"Tempo de conversão de Dbf para Sql")
   //Sys_Meter(3)
Return

**=====================================================================
Static Function FastTurbo(cTable)
   Local aStru := DBStruct()
   Local cSql

   If Sr_ExistTable(cTable)
      Sr_DropTable(cTable)
   Endif

   DBCreate(cTable,aStru,"SQLRDD")

   DBGoTop()
   Do While !Eof()
      cSql := SqlInsert(cTable,aStru)
      Sr_GetConnection():Execute(cSql)
      DBSkip()
      Sys_Meter(2)
   Enddo

   Sr_GetConnection():Commit()
Return nil


**=====================================================================
Static Function SqlInsert(cTable,aStru)
   Local nI,uVal,aCampos:={},cSql

   For nI:=1 To Len(aStru)
      uVal := FieldGet(nI)
      uVal := SQL_String(uVal,.T.)
      AAdd(aCampos,{aStru[nI,1],uVal})
   Next
   //Define os campos
   cSql := "Insert Into "+cTable+" ("+aCampos[1,1]
   For nI:=2 To Len(aCampos)
      cSql += ","+aCampos[nI,1]
   Next
   //define os dados
   cSql += ") Values ("+aCampos[1,2]
   For nI:=2 To Len(aCampos)
      cSql += ","+aCampos[nI,2]
   Next
   cSql+=");"
Return cSql

Edu, se vc conseguiu fazer a conexão, basta ajustar pasta do seus arquivos para carregar aDBF.

Uso a SQLRDD e estou muito contente, não encontro nenhuma dificuldade,  banco criado pela sqlrdd é usado por aplicativos web e android, claro que se faz necessário tomar certos cuidados como:

-Set delete off

-Não cria índices sintéticos

- sempre criar tabela via SQLRDD

- Controle transacional 

blz

Link to comment
Share on other sites

Bom dia, Jm

Coloquei a sua rotina para migrar o dbf para dentro do sql

e esta dando esse erro abaixo sera que vc consegue me ajudar por favor

Obrigado

 

09/12/2021 08:51:53: SQLExecDirect Error
(1064) 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 107 - 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 107
Command sent to database : 
CREATE TABLE `dclicli0` (    `codcli` REAL (6,0) , 
   `cgccli` CHAR (14) , 
   `nome` CHAR (60) , 
   `endereco` CHAR (60) , 
   `bairro` CHAR (50) , 
   `cidade` CHAR (60) , 
   `nro` REAL (6,0) , 
   `complement` CHAR (20) , 
   `emailfis` CHAR (100) , 
   `observacao` CHAR (100) , 
   `cep` CHAR (9) , 
   `cxpostal` CHAR (5) , 
   `estado` CHAR (2) , 
   `telefone1` CHAR (14) , 
   `telefone2` CHAR (14) , 
   `fax` CHAR (14) , 
   `telex` CHAR (12) , 
   `estadualrg` CHAR (19) , 
   `contato` CHAR (30) , 
   `pracapgto` CHAR (40) , 
   `bairpgto` CHAR (30) , 
   `cidapgto` CHAR (30) , 
   `ufpgto` CHAR (2) , 
   `ceppgto` CHAR (9) , 
   `localentre` CHAR (60) , 
   `tipoclient` CHAR (1) , 
   `fantasia` CHAR (20) , 
   `dtcadastro` DATE, 
   `banco` CHAR (3) , 
   `dtultcpa` DATE, 
   `vlrultcpa` REAL (12,2) , 
   `dtmaiorcpa` DATE, 
   `vlmaiorcpa` REAL (12,2) , 
   `vlrcpames` REAL (14,2) , 
   `dtchequesf` DATE, 
   `vlchequesf` REAL (12,2) , 
   `mediatrazo` REAL (4,0) , 
   `dataatrazo` DATE, 
   `medatraant` REAL (4,0) , 
   `limitecred` REAL (12,2) , 
   `datacred` DATE, 
   `transporte` REAL (4,0) , 
   `condpgto` CHAR (2) , 
   `vendedor` REAL (3,0) , 
   `aliqicms` REAL (5,2) , 
   `maladireta` CHAR (1) , 
   `nivel` REAL (3,0) , 
   `tipoconsu` CHAR (1) , 
   `email` CHAR (50) , 
   `f_j` CHAR (1) , 
   `vendedor1` REAL (3,0) , 
   `vendedor2` REAL (3,0) , 
   `vendedor3` REAL (3,0) , 
   `vendedor4` REAL (3,0) , 
   `vendedor5` REAL (3,0) , 
   `vendedor6` REAL (3,0) , 
   `tpcredito` CHAR (1) , 
   `pesoteoric` REAL (6,3) , 
   `obs` VARCHAR (400) , 
   `obsfin` CHAR (200) , 
   `dtusu` DATE, 
   `usuario` REAL (3,0) , 
   `site` CHAR (100) , 
   `stvenda` CHAR (1) , 
   `ramal1` REAL (6,0) , 
   `ramal2` REAL (6,0) , 
   `isentaipi` CHAR (1) , 
   `etiqueta` TINYINT, 
   `tirafluxo` CHAR (1) , 
   `segmento` CHAR (2) , 
   `tipofrete` CHAR (1) , 
   `suframa` CHAR (20) , 
   `pedidonfe` CHAR (1) , 
   `tipoie` CHAR (1) , 
   `midia` CHAR (1) , 
   `percperda` REAL (8,4) , 
   `nomecon1` CHAR (40) , 
   `fonecon1` CHAR (14) , 
   `emailcon1` CHAR (50) , 
   `nomecon2` CHAR (40) , 
   `fonecon2` CHAR (14) , 
   `emailcon2` CHAR (50) , 
   `nomecon3` CHAR (40) , 
   `fonecon3` CHAR (14) , 
   `emailcon3` CHAR (50) , 
   `nomecon4` CHAR (40) , 
   `fonecon4` CHAR (14) , 
   `emailcon4` CHAR (50) , 
   `nomecon5` CHAR (40) , 
   `fonecon5` CHAR (14) , 
   `emailcon5` CHAR (50) , 
   `nomecon6` CHAR (40) , 
   `fonecon6` CHAR (14) , 
   `emailcon6` CHAR (50) , 
   `regiao` CHAR (2) , 
   `potencial` CHAR (2) , 
   `obsate` MEDIUMBLOB, 
   `isuf` CHAR (20) , 
   `tabcom1` CHAR (1) , 
   `tabcom2` CHAR (1) , 
   `tabcom3` CHAR (1) , 
   `tabcom4` CHAR (1) , 
   `tabcom5` CHAR (1) , 
   `tabcom6` CHAR (1) , 
   `sr_recno` BIGINT (15) NOT NULL UNIQUE AUTO_INCREMENT , 
   `sr_deleted` CHAR (1)  NOT NULL
 ) Type=InnoDb
Steatment handle  : 
Connection handle : 
RetCode           :       1064
    SR_MYSQL:RUNTIMEERR     Linha : 859
SR_MYSQL:EXEC     Linha : 367
SR_WORKAREA:SQLCREATE     Linha : 5030
DBCREATE     Linha : 0
FASTTURBO     Linha : 3041
UPLOAD     Linha : 3016
CONECTAR     Linha : 704
(b)MAIN     Linha : 248
TMDIFRAME:ACTIVATE     Linha : 1083
MAIN     Linha : 248    

 

Link to comment
Share on other sites

Tive o mesmo erro. Depois de alguns ajustes, ficou assim:

Procedure BkpNuvem()
   Local aFiles,cFile,cTable,nTime,oErr,aDBF,nI
   
   oSql := SR_GetConnection()
   cDBN := UPPER( SR_GetConnectionInfo(, SQL_DBMS_NAME ) )
   SR_End()
   CLOSE ALL

   Set AutOpen OFF
   aDBF := Directory(cPasta+"\*.dbf")

   aFiles :={}
   For nI:=1 TO Len(aDBF)
      AAdd(aFiles,Trim(aDBF[nI,1]))
   Next
   
   nTot := Len(aFiles)
   nReg := 0
   nMtr := 0
   cSay := "Salvando backup em nuvem. Aguarde..."

   DEFINE DIALOG oDmeter FROM 0,0 TO 6, 35 TITLE "Verificação de dados" STYLE DS_MODALFRAME
   @05,05 SAY oSay PROMPT cSay PIXEL SIZE 130, 10 OF oDmeter UPDATE
   @15,05 METER oMeter VAR nMtr TOTAL nTot SIZE 130, 12 OF oDmeter UPDATE PIXEL
   ACTIVATE DIALOG oDmeter CENTER NOWAIT VALID (!GetKeyState( VK_ESCAPE ) .AND. !GetKeyState( VK_MENU ))
   SysRefresh()

   nTime:=Seconds()
   For Each cFile IN aFiles
      cTable := Lower(cFileNoExt(cFile))
      cSay := "Salvando backup de "+cTable+"..."
      oDmeter:Update()
      Try
         USE &(cTable) EXCLUSIVE NEW VIA "DBFCDX" // DBUseArea(.T.,"DBFCDX",cFile,"TEMP",.F.)
         If LastRec() > 0
            FastTurbo("bkp_"+cTable)
         Endif
         DBCloseArea()
      Catch oErr
         XBrowser oErr title cFile
         DBCloseArea()
      End
      nReg ++
      oMeter:Set(nReg)
      oMeter:Refresh()
   Next
   
   nReg := nTot
   oMeter:Set(nReg)
   oMeter:Refresh()
   SysWait(0.25)
   oDmeter:End()

   MsgStop("Backup em nuvem concluído em "+SecToTime(Seconds()-nTime)+"h.", "Informação do sistema")
   * AbreDados()
Return

**=====================================================================
Static Function FastTurbo(cTable)
   Local aStru := DBStruct()
   Local cSql
   n_Conn := nConection(2)
   IF n_Conn = 0 ; RETURN NIL ; ENDIF
   If Sr_ExistTable(cTable)
      Sr_DropTable(cTable)
   Endif
   cComm := XB2SqlStr(aStru, cTable)
   nErr := SR_GetConnection():Execute( cComm )
   DBGoTop()
   Do While !Eof()
      cSql := SqlInsert(cTable, aStru)
      SR_GetConnection():Execute(cSql)
      DBSkip()
   Enddo
   Sr_GetConnection():Commit()
Return nil

**=====================================================================
Static Function SqlInsert(cTable,aStru)
   Local nI,uVal,aCampos:={},cSql

   For nI:=1 To Len(aStru)
      uVal := FieldGet(nI)
      uVal := Any2SqlStr(uVal)
      AAdd(aCampos,{aStru[nI,1],uVal})
   Next
   //Define os campos
   cSql := "Insert Into "+cTable+" ("+aCampos[1,1]
   For nI:=2 To Len(aCampos)
      cSql += ","+aCampos[nI,1]
   Next
   //define os dados
   cSql += ") Values ("+aCampos[1,2]
   For nI:=2 To Len(aCampos)
      cSql += ","+aCampos[nI,2]
   Next
   cSql+=");"
Return cSql

FUNCTION XB2SqlStr(aStr, cDBase)
   LOCAL cStrct
   cStrct := "CREATE TABLE `"+LOWER(cDBase)+"` ("
   FOR nF := 1 TO LEN(aStr)
   	 IF LOWER(aStr[nF,1]) !=  "sr_recno"
	       IF nF > 1 ; cStrct += ", " ; ENDIF // Mais de um campo
	       cStrct += "`"+LOWER(aStr[nF,1])+"` "+SetFType(aStr[nF,2],aStr[nF,3],aStr[nF,4])
       ENDIF
   NEXT
   IF LEN(aStr) > 0 ; cStrct += ", " ; ENDIF // Já acrescentado algum campo
   cStrct += "`sr_recno` BIGINT (15) NOT NULL UNIQUE AUTO_INCREMENT)" // Sempre criar o 'sr_recno' no final, para compatibilizar com SQLRDD
RETURN( cStrct )

STATIC FUNCTION SetFType(cTipo,nSize,nDeci)
   LOCAL cFType
   IF cTipo = "C"
      IF nSize <= 255
         cFType := "char("+ALLTRIM(STR(nSize))+")"
      ELSE
         cFType := "mediumblob"
      ENDIF
   ELSEIF cTipo = "M" ; cFType := "mediumblob"
   ELSEIF cTipo = "N" ; cFType := "double("+ALLTRIM(STR(nSize))+","+ALLTRIM(STR(nDeci))+")"
   ELSEIF cTipo = "L" ; cFType := "tinyint(4)"
   ELSEIF cTipo = "D" ; cFType := "date"
   ENDIF
RETURN(cFType)

STATIC FUNCTION Any2SqlStr(uVal)
   LOCAL Dados := ""
   IF VALTYPE(uVal) = "C" ; Dados := "'"+STRTRAN(ALLTRIM(uVal), "'", "")+"'"
   ELSEIF VALTYPE(uVal) = "M" ; Dados := "'"+STRTRAN(ALLTRIM(uVal), "'", "")+"'"
   ELSEIF VALTYPE(uVal) = "D" ; Dados := "'"+SR_dtosdot(uVal)+"'"
   ELSEIF VALTYPE(uVal) = "N" ; Dados := ALLTRIM(STR(uVal))
   ELSEIF VALTYPE(uVal) = "L" ; Dados := "'"+IIF(uVal = .T., "1", "0")+"'"
   ENDIF
RETURN(Dados)

Mas ainda deu um erro no meio do upload de uma das tabelas. Ainda vou verificar ou que houve.

Link to comment
Share on other sites

Amigo

 

Não sei se vai servir pra vc, mas tenho uma rotina bem xulé bem antiga em conmsole, embora eu a uso ainda, pq a preguiça e a falta de capacidade, são maiores que a inteligência ahahaha, mas me quebra o galho e não perco tempo.

           //Upload de tabelas Dbf x Sql    '
           oCon :=  SR_GetActiveConnection()
           SR_CheckCnn( oCon )
           WHILE .T.
             CLEAR SCREEN

            x_path1 := x_file1 := x_file2  := SPACR( 70 )
             @ 08,00 SAY "Path origem....: " GET x_path1 PICT "@!"
             @ 10,00 SAY "Tabela origem..: " GET x_file1 PICT "@!"      VALID( ! EMPTY(x_file1) )
             @ 11,00 SAY "Tabela destino.: " GET x_file2 PICT "@!"      VALID( ! EMPTY(x_file2) )
             READ
             IF LASTKEY()==27
                CLOSE ALL
                QUIT
             ENDIF
             DiretorioOrigem     := rtrim(ltrim(x_path1))
             FilerOrigem            := rtrim(ltrim(x_file1))
             DriveOrigem           := ""
             
             DriveOrigem         := IIF("\\" $ DiretorioOrigem, "", IIF(":" $ DiretorioOrigem,"",CURDRIVE() + ":") )                
 
             IF ! File(DriveOrigem + DiretorioOrigem + FilerOrigem+".DBF")
                ERRMSG1("Tabela DBF de origem não encontrada")
                CLOSE ALL
                LOOP
             ENDIF   

             DriveDestino         := ""

             DiretorioDestino     := "" //LimpaStr(x_path1)
             FileDestino          := LimpaStr(x_file2)

             xCria := .T.
             IF FileSql(FileDestino)
                IF ! ERRMSG2("Tabela já existe no BD, copia S/N?")
                   CLOSE ALL
                   LOOP
                ELSE   
                   if ! ERRMSG2("Elimina a tabela S/N?")
                      ERRMSG1("Tabela não eliminada",23)
                      CLOSE ALL
                      LOOP
                   ENDIF   
                   SR_DropTable( FileDestino ) //deleta a tabela
                   xCria := .F.
                ENDIF   
             endif

             AGUARDE("Abrindo tabela origem")
             IF SELECT(FilerOrigem) == 0
                DbUseArea( .T., "DBFCDX" , DriveOrigem + DiretorioOrigem + FilerOrigem, FilerOrigem,.T.)
             ENDIF   

             AGUARDE("Capturando estrutura")

             xFields := (FilerOrigem)->(DBSTRUCT())
             CLOSE ALL

             AGUARDE("Verificando a conexão ativa")
             SR_GetActiveConnection(oCon)
             IF ERRMSG2("Recria a Tabela S/N?")
                AGUARDE("Criando estrutura da tabela " + FileDestino + " no BD")           
                DBCREATE(FileDestino,xFields,"SQLRDD")
                xCria := .T.
             ELSE
                CLOSE ALL
                LOOP
             ENDIF   


             AGUARDE("Abrindo tabela destino")
             DbUseArea( .T., "SQLRDD" , FileDestino, FileDestino,.T.)
             IF ERRMSG2("Limpa a tabela S/N?")
                ZAP
             ENDIF   
             if ERRMSG2("Importa a tabela S/N?")
                AGUARDE("Importando " + DriveOrigem + DiretorioOrigem + FilerOrigem)
                APPE FROM (DriveOrigem + DiretorioOrigem + FilerOrigem+".DBF") VIA "DBFNTX"//+".DBF"
                ERRMSG1("Tabela importada - " +  DriveOrigem + DiretorioOrigem + FilerOrigem)
             ENDIF   
             HB_GCAll(.T.)     
             CLOSE ALL
          ENDDO  

 

Link to comment
Share on other sites

 

Procedure UpLoad()
   Local aFiles,cFile,cTable,nTime,cRDD,oErr,aDBF,nI,cDir

   Set AutOpen OFF
   cDir := CurDirX()+"arq\" ////func da xhb  - curdirx()
   aDBF := Directory( cDir+"*.dbf")  //func da xhb

   aFiles :={}
   For nI:=1 TO Len(aDBF)
      AAdd(aFiles,Trim(aDBF[nI,1]))
   Next
   XBrowse(aFiles)
   //Sys_Meter(1,0,"Importando o arquivo")
   nTime:=Seconds()
   For Each cFile IN aFiles
      cTable := Lower(cFileNoExt(cFile))
      If File(cDir+cFile) .and. !SR_ExistTable(cTable)
         Try
            cRDD := IIF(File(cDir+cFile+".dbt"),"DBFCDX","DBFNTX")
            DBUseArea(.T.,cRDD,cDir+cFile,"TEMP",.F.)
            If LastRec() > 0
               //Sys_Meter(2,LastRec(),"Importando o arquivo "+cFile+".DBF")
               FastTurbo(cTable)
            Endif
            DBCloseArea()
         Catch oErr
            //XBrowser oErr title cFile
            MsgStop('erro')
            DBCloseArea()
         End
      Endif
   Next
   MsgStop(SecToTime(Seconds()-nTime),"Tempo de conversão de Dbf para Sql")
   //Sys_Meter(3)
Return

**=====================================================================
Static Function FastTurbo(cTable)
   Local aStru := DBStruct()
   Local cSql

   If Sr_ExistTable(cTable)
      Sr_DropTable(cTable)
   Endif

   DBCreate(cTable,aStru,"SQLRDD")

   DBGoTop()
   Do While !Eof()
      cSql := SqlInsert(cTable,aStru)
      Sr_GetConnection():Execute(cSql)
      DBSkip()
      //Sys_Meter(2)
   Enddo

   Sr_GetConnection():Commit()
Return nil


**=====================================================================
Static Function SqlInsert(cTable,aStru)
   Local nI,uVal,aCampos:={},cSql

   For nI:=1 To Len(aStru)
      uVal := FieldGet(nI)
      uVal := SQL_String(uVal,.T.)
      AAdd(aCampos,{aStru[nI,1],uVal})
   Next
   //Define os campos
   cSql := "Insert Into "+cTable+" ("+aCampos[1,1]
   For nI:=2 To Len(aCampos)
      cSql += ","+aCampos[nI,1]
   Next
   //define os dados
   cSql += ") Values ("+aCampos[1,2]
   For nI:=2 To Len(aCampos)
      cSql += ","+aCampos[nI,2]
   Next
   cSql+=");"
Return cSql

**=======================================================================
FUNCTION Sql_String(xValue,lIsNull,nID )
//SR_cDBValue( <uData>, [<nSystemID>] ) ==> cQuotedString
**=======================================================================
   Local cType := ValType(xValue)
   Default(@lIsNull,.F.)
   Default(@nID,SR_GetConnection():nSystemID)

   If cType == "C"  //corrige aspas simples
      xValue := StrTran(xValue,"'"," ")
   Endif

   xValue := SR_SQLQuotedString(xValue,nID) //nid=tipo de banco sql
   If !lIsNull
      IF (cType IN "CD") .AND. xValue == "NULL"
         xValue := "''"
      ElseIF cType == "N" .AND. xValue == "NULL"
         xValue := "0"
      Endif
   Endif
Return xValue

Fiz checklist na rotina, acertei alguns pontos, faltou eu postar a rotina Sql_String() que formata os dados, a falta dela pode ter causado o erro.

Link to comment
Share on other sites

bom dia a todos

Fiz o teste com a rotina do Ariston e funcionou perfeitamente

O unico problema nesse momento esta relacionado aos campos memo

Alguns registro deram erro na hora de migrar para tabela

Percebi que nesse registro foram gravados caracteres estranhos, provavelmente o usuario digitou ou colou da internet algum texto 

Usando o slqexpress em cima do windows ele nao da erro mas usando o mariadb em um servidor linux ele nao vai

Provavelmente terei que jogar somente a estrutura do arquivo para o banco de dados e depois na hora de importar os dados tentar tratar esses campos tirando esses caracteres

Sera que é isso mesmo

Obrigado a todos

Edu

Link to comment
Share on other sites

 

3 horas atrás, edutraini disse:

bom dia a todos

Fiz o teste com a rotina do Ariston e funcionou perfeitamente

O unico problema nesse momento esta relacionado aos campos memo

Alguns registro deram erro na hora de migrar para tabela

Percebi que nesse registro foram gravados caracteres estranhos, provavelmente o usuario digitou ou colou da internet algum texto 

Usando o slqexpress em cima do windows ele nao da erro mas usando o mariadb em um servidor linux ele nao vai

Provavelmente terei que jogar somente a estrutura do arquivo para o banco de dados e depois na hora de importar os dados tentar tratar esses campos tirando esses caracteres

Sera que é isso mesmo

Obrigado a todos

Edu

A rotinha não é minha. Parece que é de Jmsilva

Uma sugestão é modificar a função Any2SqlStr(uVal), inserindo uma função que remova os caracteres especiais dos campos memo  nesta linha:

ELSEIF VALTYPE(uVal) = "M" ; Dados := "'"+STRTRAN(ALLTRIM(uVal), "'", "")+"'"

Remova tudo que não for letras e números, inclusive CR e LF. Deixe apenas caracteres normais.

Link to comment
Share on other sites

1 hora atrás, kapiaba disse:

Ariston, essa rotina que você postou, em minha modesta opinião, é puro show(), só de olhar, já encheu os olhos na perfeição. Gostei muito. abs.

Obrigado, amigo. Mas quem postou primeiro foi o Jmsilva.

Eu também gostei muito dela por ser bem prática. Fiz algumas modificações visto que não compilou de primeira.

Muito obrigado, Jmsilva

Link to comment
Share on other sites

Em 15/12/2021 at 13:01, edutraini disse:

Boa tarde a todos

Queria agradecer a todos que me ajudaram tudo funcionando perfeitamente.

Um unica duvida se tem como colocar a dll libmysql dentro do sistema ou tem que jogar na pasta aonde esta executavel

Obrigado

 

Não tem como colocar a DLL dentro seu sistema. Por isso ela é uma DLL, vc tem que ter ela na pasta da aplicação (ou conforme o ambiente).

Eduardo, já terminou a questão do Atualizador? Você não me ligou mais.

Um abraço,

Alexandre Pereira

 

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...