Clipper On Line • Ver Tópico - MariaDB

MariaDB

Discussão sobre Banco de Dados e RDDs para Clipper/[x]Harbour.

Moderador: Moderadores

 

MariaDB

Mensagempor JoséQuintas » 24 Jan 2020 12:36

Iniciar testes com MariaDB.

mariadb1.png
mariadb1.png (10.88 KiB) Visualizado 9095 vezes


mariadb2.png


mariadb3.png


mariadb4.png


mariadb5.png
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18009
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

MariaDB

Mensagempor JoséQuintas » 24 Jan 2020 12:38

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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18009
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

MariaDB

Mensagempor JoséQuintas » 24 Jan 2020 12:41

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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18009
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

MariaDB

Mensagempor JoséQuintas » 24 Jan 2020 12:54

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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18009
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

MariaDB

Mensagempor JoséQuintas » 24 Jan 2020 13:27

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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18009
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

MariaDB

Mensagempor JoséQuintas » 24 Jan 2020 14:08

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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18009
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

MariaDB

Mensagempor JoséQuintas » 24 Jan 2020 14:48

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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18009
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

MariaDB

Mensagempor JoséQuintas » 24 Jan 2020 15:19

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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18009
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

MariaDB

Mensagempor bencz » 24 Jan 2020 20:40

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 de usuário

bencz
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 517
Data de registro: 28 Abr 2012 17:36
Curtiu: 6 vezes
Mens.Curtidas: 34 vezes

MariaDB

Mensagempor asimoes » 25 Jan 2020 19:28

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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

MariaDB

Mensagempor JoséQuintas » 26 Jan 2020 05:31

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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18009
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

MariaDB

Mensagempor JoséQuintas » 26 Jan 2020 09:20

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

         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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18009
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

MariaDB

Mensagempor asimoes » 26 Jan 2020 09:26

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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

MariaDB

Mensagempor JoséQuintas » 26 Jan 2020 10:05

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.

/*
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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18009
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

MariaDB

Mensagempor JoséQuintas » 26 Jan 2020 10:14

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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18009
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Próximo



Retornar para Banco de Dados

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 9 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro