MariaDB

Fórum sobre Banco de Dados e RDDs para Clipper/[x]Harbour.

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

MariaDB

Mensagem por JoséQuintas »

Iniciar testes com MariaDB.
mariadb1.png
mariadb1.png (10.88 KiB) Exibido 12338 vezes
mariadb2.png
mariadb3.png
mariadb4.png
mariadb5.png
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

MariaDB

Mensagem por JoséQuintas »

mariadb6.png
mariadb7.png
mariadb8.png
Parece mais prático que MySQL.
Só não deixou acrescentar usuário na instalação, mas dá pra fazer manual.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

MariaDB

Mensagem por JoséQuintas »

Esta parte nem faz diferença.
Só o tempo restante que parece doido, mas tudo bem.
mariadb-u1.png
mariadb-u2.png
mariadb-u3.png
mariadb-u4.png
mariadb-u5.png
Pronto.
O que era MySQL agora é MariaDB.
Agora vou começar os testes do aplicativo.

Nota:
Usei meu backup feito pelo HARBOUR pra MySQL, já é um bom começo.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

MariaDB

Mensagem por JoséQuintas »

Só alterei o nome do servidor, nem precisei mexer em mais nada.
Como é o primeiro uso do dia, tá fazendo backup do MariaDB, apesar de mostrar MySQL.
Ou seja, já está fazendo uso do MariaDB.
mariadba.png
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

MariaDB

Mensagem por JoséQuintas »

Sei lá....
Era instantâneo, continua instantâneo...
Não vou medir diferença de milésimos de segundo, porque não me importa.

Agora é só trocar no servidor.
mariadb.png
Pois é... esse mundo xbase é complicado....
Tem mais gente pra atrapalhar do que pra ajudar.

Tanta discussão sobre licença de MySQL....
E em alguns minutos ficou tudo resolvido !!!!

O que alterei no meu aplicativo? como instalei pra teste em outra máquina, alterei o nome do servidor.

Será que está usando mesmo o servidor Mariadb?
Acabei errando a senha de instalação, e o aplicativo nem acessava até corrigir a senha NO MARIADB.
Se fosse o servidor MySQL.... a senha já estava lá.
Pois é... foi tão transparente a troca, que até deixou na dúvida se era outro servidor mesmo kkkkk
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

MariaDB

Mensagem por JoséQuintas »

Comparação da instalação:

No MySQL:
- Acrescento um usuário adicional durante a instalação
- Depois como administrador do Windows localizo e altero o MY.INI pra mexer no buffer pool size
- Depois instalo o HeidiSQL

No MariaDB:
- Instalo no default - dá pra alterar buffer pool size na própria instalação mas o default foi suficiente
- Ele instala o HeidiSQL e por ele adiciono um usuário

Falta testar usando o ODBC do MariaDB ao invés do ODBC MySQL.
Isso elimina de vez qualquer software da Oracle.
No meu caso, que é ADO, vai ser só trocar o texto que vai em connectionstring := "MySQL" pelo equivalente do MariaDB.

Lógico... agora é fazer o mesmo em cada cliente...

Parece até estranho, tudo resolvido em alguns minutos.
Pela discussão sobre MySQL, parecia que não seria tão simples.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

MariaDB

Mensagem por JoséQuintas »

mariadb.png
Como eu disse antes, o MySQL ou MariaDB ficam em execução no servidor.
Por isso, no terminal não se vê nada de diferente, nem dá pra saber de onde vém as informações.

Olhei de novo pra confirmar...
O processo aparece na lista do servidor MariaDB.

Só assim mesmo, pra ter certeza de qual servidor está sendo acessado.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

MariaDB

Mensagem por JoséQuintas »

O mesmo acontece com o ODBC:

Texto usando ODBC MySQL: {MySQL ODBC 5.3 Driver}
Texto usando ODBC MariaDB: {MariaDB ODBC 3.1 Driver}

Desinstalei todos os conectores MySQL pra fazer o teste.

Tanto faz, ODBC MariaDB acessa MySQL e vice-versa.
Se o seu aplicativo usa ODBC MySQL ou MariaDB, tanto faz.
Se o servidor é MySQL ou MariaDB, tanto faz.
Pode trocar o servidor primeiro e o conector depois, ou o contrário, ou tudo de uma vez, tanto faz.

Se usar daquelas LIBs que dependem de existir uma conexão fixa criada no Windows, com certeza vai ter que mexer nisso também.

Agora planejar como vou fazer isso nos clientes, porque não dá pra fazer automático.
Em alguns casos depende do administrador da rede.

No geral achei o MariaDB mais prático, por não depender de NET Framework ou Visual C, mas pode ser porque já estavam instalados na minha máquina. Isso não seria problema, mas não sei dizer se depende de algum deles.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
bencz
Usuário Nível 4
Usuário Nível 4
Mensagens: 524
Registrado em: 28 Abr 2012 17:36
Contato:

MariaDB

Mensagem por bencz »

Não sei pq, masz esse tópico me deu vontade de fazer um teste...
Fiz o IPL em um IBM Power9 que tenho aqui e criei 2 instâncias do Ubuntu nele... Separei exatamente a mesma quantidade de memoria/cpu e disco para cada VM, quantidades dedicadas para cada VM, ou seja, sem recursos compartilhados... em uma instância instalei o Postgre e na outra o MariaDb e fiz exatamente o mesmo teste nas duas inatancias, fiz o insert de 2000000 de registros nas tabelas, com varios relacionamentos e etc... O mariadb teve um desempenho bem melhor que no postgre
Imagem
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

MariaDB

Mensagem por asimoes »

Quintas,

Qual é a string de conexão para usar o MariaDb?

Quais suas impressões sobre esse SGBD
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

MariaDB

Mensagem por JoséQuintas »

asimoes escreveu:Qual é a string de conexão para usar o MariaDb?
Quais suas impressões sobre esse SGBD
Se usa ODBC MySQL 3.51, a string é MySQL 3.51
Se usa ODBC MySQL 5.3, a string é MySQL 5.3
Se usa ODBC MariaDB 3.1, a string é MariaDB 3.1

A string tem a ver com o cliente/conector, e não com o servidor.
Vai funcionar normalmente com as LIBs do Harbour, mesmo sendo pra MySQL.

Sobre o MariaDB:

MySQL custa 2.000 dólares por ano, MariaDB é grátis.
Acho que isso já é o suficiente pra decidir a maioria dos casos.
No caso de versão MySQL paga, a comparação vai ser com muitos outros produtos pagos, e com a condição financeira do cliente.

Sinceramente....
Sem pressa de trocar de MySQL pra MariaDB, já que pode ser trocado a qualquer momento.
E como meu aplicativo usa DBF + MySQL, nem está fazendo uso de nada avançado que possa fazer diferença.

A única coisa interessante a ser feita é trocar a conexão pra MariaDB, que é grátis, e funciona tanto pra MariaDB quanto pra MySQL. Isso resolve qualquer questão sobre o aplicativo.
Quando eu fizer uma instalação nova, ou tiver que refazer alguma reinstalação, aproveito e instalo o MariaDB.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

MariaDB

Mensagem por JoséQuintas »

Ao restaurar backups de TODOS os clientes pra fazer testes, só deu este erro.
Erro executando comando:-2147217900 [MySQL][ODBC 5.3(a) Driver][mysqld-5.5.66-MariaDB]Can't DROP 'NOTA'; check that column/key exists
mas é lógico... se NÃO existir apagar.... aí não dá.... kkk

Código: Selecionar todos

         IF ! :IndexExists( "JPNOTFIS", "NOTA" )
            :ExecuteCmd( "ALTER TABLE JPNOTFIS DROP INDEX NOTA" )
         ENDIF
Criei essa IndexExists() e passei a usar, mas alterei errado no fonte que faz atualização.

Vou aproveitar e fazer tudo de novo usando o conector do MariaDB.
O servidor já é MariaDB.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

MariaDB

Mensagem por asimoes »

Quintas,

Você tem algum utilitário de migração do dbf para o MySQL ou MariaDB ?

Outra coisa o driver é somente ODBC não existe OleDb para o MariaDB ?
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

MariaDB

Mensagem por JoséQuintas »

Só ODBC mesmo, acho que o de ADS é o único que tem a opção diferente.

Eu uso um fonte em Harbour.
Basicamente é escolher o tipo equivalente no MySQL.
O mais importante é criar o comando o maior possível, pra incluir muita coisa de uma vez, e não um registro por vez.
Deixei como default o máximo de 500kb
Também tem a conversão conforme codepage, mas isso vai de cada um, ou de cada base.
Segue como exemplo.

Código: Selecionar todos

/*
ZE_SQLFROMDBF - Transfere de DBF pra MySQL incluindo ou não
José Quintas
*/

#include "inkey.ch"
#include "dbstruct.ch"
#define MYSQL_MAX_CMDINSERT   500000

FUNCTION SqlFromDbf()

   LOCAL oFiles, nCont, acAchoice := {}, cFileDbf, nOpc := 1, cConfirma := "NAO", GetList := {}

   @ 2, 1 SAY "ATENÇÃO"
   @ Row() + 1, 1 SAY "Os dados dos DBFs são salvos no MySql."
   @ Row() + 1, 1 SAY "Se quiser eliminar dados anteriores do MySql, precisa fazer manualmente"
   @ Row() + 1, 1 SAY "Se quiser eliminar dados finais do DBF, precisa fazer manualmente"

   oFiles := CnfDbfInd()
   FOR nCont = 1 TO Len( oFiles )
      AAdd( acAchoice, oFiles[ nCont, 1 ] )
   NEXT
   DO WHILE .T.
      wAchoice( Row() + 1, 5, acAchoice, @nOpc, "Arquivos a transferir" )
      IF LastKey() == K_ESC
         EXIT
      ENDIF
      cFileDbf := Upper( oFiles[ nOpc, 1 ] )
      Mensagem( "Confirme criar estrutura para " + cFileDbf )
      @ Row(), Col() + 2 GET cConfirma PICTURE "@!"
      READ
      Mensagem()
      IF LastKey() == K_ESC .OR. cConfirma != "SIM"
         LOOP
      ENDIF
      CopyDbfToMySql( cFileDbf, .F., .T., .F., cFileDbf )
   ENDDO

   RETURN NIL

FUNCTION CopyDbfToMySql( cTable, lTransfere, lCria, lZera, cNewTable )

   LOCAL oStru
   LOCAL cSql, xValue, nCont, cSqlFix
   LOCAL lBegin := .T., cTxt, cKeyName
   LOCAL cnGERAL := ADOClass():New( AppConexao() )
   LOCAL nSelect := Select()

   IF ! File( cTable + iif( ".DBF" $ Upper( cTable ), "", ".DBF" ) )
      RETURN NIL
   ENDIF
   hb_Default( @lCria, .F. )
   hb_Default( @lZera, .F. )
   hb_Default( @cNewTable, cTable )
   cTable      := Upper( cTable )
   SELECT 0
   USE ( cTable ) ALIAS DbfDb
   oStru    := dbStruct()
   cKeyName := "ID" + iif( Left( cTable, 2 ) $ "JP,HL", Substr( cTable, 3 ), cTable )
   USE
   cSql := "CREATE TABLE IF NOT EXISTS " + cNewTable + " ( " + cKeyName + " INT(9) NOT NULL AUTO_INCREMENT, "
   FOR nCont = 1 TO Len( oStru )
      IF oStru[ nCont, DBS_NAME ] != cKeyName
         cSql += oStru[ nCont, DBS_NAME ] + " "
         DO CASE
         CASE oStru[ nCont, DBS_TYPE ] == "N"
            IF oStru[ nCont, DBS_DEC ] == 0
               cSql += " INT( " + Ltrim( Str( oStru[ nCont, DBS_LEN ] ) ) + " ) DEFAULT 0"
            ELSE
               cSql += " DOUBLE( " + Ltrim( Str( oStru[ nCont, DBS_LEN ] ) ) + " , " + Ltrim( Str( oStru[ nCont, DBS_DEC ] ) ) + " ) DEFAULT 0"
            ENDIF
         CASE oStru[ nCont, DBS_TYPE ] == "C"
            IF oStru[ nCont, DBS_LEN ] < 250
               cSql += " VARCHAR( " + Ltrim( Str( oStru[ nCont, DBS_LEN ] ) ) + " ) DEFAULT '' "
            ELSE
               cSql += " TEXT"
            ENDIF
         CASE oStru[ nCont, DBS_TYPE ] == "D"
            cSql += " DATE " 
         CASE oStru[ nCont, DBS_TYPE ] == "M"
            cSql += " TEXT "
         ENDCASE
         cSql += " , "
      ENDIF
   NEXT
   cSql += " PRIMARY KEY ( " + cKeyName + " )"
   cSql += " )"
   cSql += ";"
   SayScroll( "Salvando no MySql " + cTable )
   IF lCria
      cnGERAL:ExecuteCmd( cSql )
   ENDIF
   IF lZera
      cnGERAL:ExecuteCmd( "TRUNCATE TABLE " + cNewTable )
   ENDIF
   IF ! lTransfere
      SELECT ( nSelect )
      RETURN NIL
   ENDIF
   SELECT 0
   USE ( cTable ) ALIAS DbfDb
   GrafTempo( "Processando " + cTable )
   cSqlFix := "INSERT INTO " + cNewTable + " ( "
   FOR nCont = 1 TO FCount()
      cSqlFix += FieldName( nCont )
      IF nCont != FCount()
         cSqlFix += ", "
      ENDIF
   NEXT
   cSqlFix += " ) VALUES "
   cTxt := ""
   DO WHILE ! Eof()
      GrafTempo( RecNo(), LastRec() )
      Inkey()
      cSql := "( "
      FOR nCont = 1 TO FCount()
         xValue := FieldGet( nCont )
         DO CASE
         CASE ValType( xValue ) == "N"
            cSql += NumberSql( xValue )
         CASE ValType( xValue ) == "D"
            cSql += DateSql( xValue )
         CASE ValType( xValue ) == "C"
            xValue := MySqlValidString( xValue )
            cSql += StringSql( xValue )
         OTHERWISE
            cSql += "NULL"
         ENDCASE
         IF nCont != FCount()
            cSql += ","
         ENDIF
      NEXT
      cSql += " )"
      IF Len( cTxt ) == 0
         cTxt += cSqlFix
         lBegin := .T.
      ENDIF
      IF ! lBegin
         cTxt += ", "
      ENDIF
      lBegin := .F.
      cTxt += cSql
      IF Len( cTxt ) > MYSQL_MAX_CMDINSERT
         cnGERAL:ExecuteCmd( cTxt )
         cTxt := ""
      ENDIF
      SKIP
   ENDDO
   IF Len( cTxt ) != 0
      cnGERAL:ExecuteCmd( cTxt )
   ENDIF
   USE
   SELECT ( nSelect )

   RETURN NIL

#define MYSQL_INSERT_COMPLETE  1
#define MYSQL_INSERT_NONAMES   2

FUNCTION cmdSQLInsert( nInsertType, cTableName )

   LOCAL cSql := "", nCont, xValue

   hb_Default( @nInsertType, MYSQL_INSERT_COMPLETE )
   hb_Default( @cTableName, Alias() )

   IF nInsertType == MYSQL_INSERT_COMPLETE
      cSql := cSql + "INSERT INTO `" + cTableName + "` "
   ENDIF
   IF nInsertType == MYSQL_INSERT_COMPLETE
      cSql += "( "
      FOR nCont = 1 TO FCount()
         cSql += "`" + FieldName( nCont ) + "`"
         IF nCont != FCount()
            cSql += ", "
         ENDIF
      NEXT
      cSql += " ) "
      cSql += "VALUES "
   ENDIF
   cSql += "( "
   FOR nCont = 1 TO FCount()
      xValue := FieldGet( nCont )
      DO CASE
      CASE ValType( xValue ) == "N"
         cSql += NumberSql( xValue )
      CASE ValType( xValue ) == "D"
         cSql += DateSql( xValue )
      CASE ValType( xValue ) == "C"
         xValue := MySqlValidString( xValue )
         cSql += StringSql( xValue )
      OTHERWISE
         cSql += "NULL"
      ENDCASE
      IF nCont != FCount()
         cSql += ","
      ENDIF
   NEXT
   cSql += " ) "

   RETURN cSql

FUNCTION CopyRecordToMySql( cDatabase, cChaveAcesso )

   LOCAL nCont, lInsert := .T., cnMySql := ADOClass():New( AppConexao() )

   IF cChaveAcesso != NIL
      lInsert := ( ADORecCount( cDatabase, cChaveAcesso ) == 0 )
   ENDIF
   WITH OBJECT cnMySql
      :QueryCreate()
      FOR nCont = 1 TO FCount()
         :QueryAdd( FieldName( nCont ), FieldGet( nCont ) )
      NEXT
      IF lInsert
         :QueryExecuteInsert( cDatabase )
      ELSE
         :QueryExecuteUpdate( cDatabase, cChaveAcesso )
      ENDIF
   ENDWITH

   RETURN NIL

STATIC FUNCTION MySqlValidString( xValue )

   xValue := StrTran( xValue, Chr(91),  " " )
   xValue := StrTran( xValue, Chr(93),  " " )
   xValue := StrTran( xValue, Chr(167), " " )
   xValue := StrTran( xValue, Chr(128), "C" )
   xValue := StrTran( xValue, Chr(135), "C" )
   xValue := StrTran( xValue, Chr(166), "A" )
   xValue := StrTran( xValue, Chr(198), "A" )
   xValue := StrTran( xValue, Chr(0),   "" )
   //xValue := StrTran( xValue, Chr(95),  "-" ) // usada em email barra inferior
   xValue := StrTran( xValue, Chr(229), "O" )
   xValue := StrTran( xValue, Chr(124), " " )
   xValue := StrTran( xValue, Chr(141), " " )
   xValue := StrTran( xValue, Chr(181), " " )
   xValue := StrTran( xValue, Chr(162), " " )
   xValue := StrTran( xValue, Chr(224), " " )
   xValue := StrTran( xValue, Chr(133), " " )
   xValue := StrTran( xValue, Chr(144), "E" )
   xValue := StrTran( xValue, Chr(160), " " )

   RETURN xValue
O ideal é cada um fazer seus próprios testes, porque nunca se sabe que tipos de caractere podem existir nos DBFs.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

MariaDB

Mensagem por JoséQuintas »

Nota adicional:

O campo chave incremental que é criado segue abaixo:

arquivo JPCLIENTE, vai ser idCLIENTE
arquivo HLCLIENTE, vai ser idCLIENTE
arquivo OUTRONOME, vai ser idOUTRONOME

E o primeiro fonte é pra transferir a pasta inteira de uma vez.

Só tem os tipos de campo que uso: Numérico, Caractere, Data, e Memo.
Pode precisar ajuste pra campo lógico, ou outro.

De um modo geral é:

CREATE DATABASE xxxx ( lista de campos )
INSERT INTO xxxx ( campo1, campo2, campo3 ) VALUES ( valor1, valor2, valor3 )
ou
INSERT INTO xxx VALUES ( valor1, valor2, valor3 )

Prefiro com nome de campo, assim funciona com estrutura diferente, e pra cadastrar o incremental automático.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder