Tutorial de SQL
Moderador: Moderadores
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Tutorial de SQL
Na prática é um bom começo pra aprendizado.Mario Mesquita escreveu:Tem alguma rotina de migração DBF para MySql com criação de tabelas, etc, por aqui? Algo que possa servir de ponto de partida para converter as tabelas DBF?
Fazer isso na mão parece ruim, como estou engatinhando acho que com algo programado deve ser melhor...
Procurei por aqui mas não achei, se tiver alguma dica me ajuda muito,
É pegar a estrutura, fazer o CREATE TABLE, e depois fazer INSERT dos campos.
Vai fazer isso depois milhares de vezes, o que custa fazer também no início?
Crie uma, dê uma olhada pelo HeidiSQL como foi criada, e faça igual.
Código: Selecionar todos
aStruList := dbStruct()
cSQL := "CREATE TABLE " + Dbf() + "( "
FOR EACH oElement IN aStruList
cName := oELement[ F_NAME ]
cType := oElement[ F_TYPE ]
nLen := oElement[ F_LEN ]
nDec := oElement[ F_DEC ]
DO CASE
CASE cType == "C"
cSQL += cName + " VARCHAR(| + lTrim( Str( nLen ) ) + ")"
...
NEXT
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/
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/
- Mario Mesquita
- Usuário Nível 4

- Mensagens: 613
- Registrado em: 08 Dez 2009 13:47
- Localização: Rio de Janeiro
Tutorial de SQL
Boa tarde a todos.
Quintas, estou seguindo seus passos. Baixei o MySql e o HeidiSQL, agora vendo como faz, achei um curso no YouTube, pq o pouco que sabia azedou... vamos em frente, afinal.
Beleza, vou por aí, tudo agora é aprendizado. Mas no futuro quando migrar os DBFs em clientes, vou precisar de algo mais automatizado, melhor ter algo
pronto pra fazer isso. Nem é pra pensar nesse minuto mas é inevitável.
Tô animado, já era para eu ter subido no bonde do SQL faz tempo.
Pra quem tá meio mais ou menos como eu, o curso no YT, é sempre uma ajudinha:
https://www.youtube.com/user/bosontreinamentos
Saudações,
Mario.
Quintas, estou seguindo seus passos. Baixei o MySql e o HeidiSQL, agora vendo como faz, achei um curso no YouTube, pq o pouco que sabia azedou... vamos em frente, afinal.
Beleza, vou por aí, tudo agora é aprendizado. Mas no futuro quando migrar os DBFs em clientes, vou precisar de algo mais automatizado, melhor ter algo
pronto pra fazer isso. Nem é pra pensar nesse minuto mas é inevitável.
Tô animado, já era para eu ter subido no bonde do SQL faz tempo.
Pra quem tá meio mais ou menos como eu, o curso no YT, é sempre uma ajudinha:
https://www.youtube.com/user/bosontreinamentos
Saudações,
Mario.
- Mario Mesquita
- Usuário Nível 4

- Mensagens: 613
- Registrado em: 08 Dez 2009 13:47
- Localização: Rio de Janeiro
Tutorial de SQL
Valdomiro, valeu!
Agora que vi. Esse programa está no pacote do HMG 3.4.4, é um bom ponto de partida pra estudos.
Sds,
Mario.
Agora que vi. Esse programa está no pacote do HMG 3.4.4, é um bom ponto de partida pra estudos.
Sds,
Mario.
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Tutorial de SQL
É que tem o detalhe da codepage.
Depende da codepage do aplicativo, e da codepage usada no MySQL.
A prova final é sua, porque depende do conteúdo encontrado nos DBFs.
E como isso pode acontecer durante o uso depois, já se prepara a partir dos DBFs/conteúdos que tem hoje, porque teoricamente é o mesmo que vai ter depois que estiver em uso.
Uma coisa que faz muita diferença nessa inclusão em massa, é incluir vários registros por vez, ao invés de um por um.
Ao invés de INSERT pra um registro, faz INSERT PRA vários.
Aqui coloquei como limite um comando com até 256.000 caracteres.
Limitei pelo comando, e não pela quantidade.
Depende da codepage do aplicativo, e da codepage usada no MySQL.
A prova final é sua, porque depende do conteúdo encontrado nos DBFs.
E como isso pode acontecer durante o uso depois, já se prepara a partir dos DBFs/conteúdos que tem hoje, porque teoricamente é o mesmo que vai ter depois que estiver em uso.
Uma coisa que faz muita diferença nessa inclusão em massa, é incluir vários registros por vez, ao invés de um por um.
Ao invés de INSERT pra um registro, faz INSERT PRA vários.
Aqui coloquei como limite um comando com até 256.000 caracteres.
Limitei pelo comando, e não pela quantidade.
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/
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/
- Mario Mesquita
- Usuário Nível 4

- Mensagens: 613
- Registrado em: 08 Dez 2009 13:47
- Localização: Rio de Janeiro
Tutorial de SQL
Bom dia e bom domingo a todos.
Interessante esse ponto sobre o codepage. Eu tenho tabelas em ANSI e UTF-8 pq ainda tenho coisas em HMG 3.0.46 e coisas na
versão 3.4.4. A ideia é passar tudo pra 3.4.4 com tabelas em UTF-8. Tem a parte chata de converter essas tabelas em ANSI.
E, pelo que vi, tem que se ligar no codepage da BD no MySql, né?
Uma dúvida: tenho campos que sofrem incremento tipo protocolos, números de operação ou algum tipo de numeração. Os campos são
caractere e incremento usando VAL(variável) + 1. NO caso do MySql, qual a técnica recomendada? Campo numérico com auto incremento
ou pode ser desse jeito?
Saudações,
Mario.
Interessante esse ponto sobre o codepage. Eu tenho tabelas em ANSI e UTF-8 pq ainda tenho coisas em HMG 3.0.46 e coisas na
versão 3.4.4. A ideia é passar tudo pra 3.4.4 com tabelas em UTF-8. Tem a parte chata de converter essas tabelas em ANSI.
E, pelo que vi, tem que se ligar no codepage da BD no MySql, né?
Uma dúvida: tenho campos que sofrem incremento tipo protocolos, números de operação ou algum tipo de numeração. Os campos são
caractere e incremento usando VAL(variável) + 1. NO caso do MySql, qual a técnica recomendada? Campo numérico com auto incremento
ou pode ser desse jeito?
Saudações,
Mario.
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Tutorial de SQL
Melhor deixar por conta do MySQL, assim NUNCA vai ter problema.
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/
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/
- Mario Mesquita
- Usuário Nível 4

- Mensagens: 613
- Registrado em: 08 Dez 2009 13:47
- Localização: Rio de Janeiro
Tutorial de SQL
Bom dia e boa semana a todos.
Valeu, Quintas. Então deixo os campos como numéricos com auto incremento, certo? E formato como "@R" ou similar né? Já que não podem ser tipo caractere.
Saudações,
Mario.
Valeu, Quintas. Então deixo os campos como numéricos com auto incremento, certo? E formato como "@R" ou similar né? Já que não podem ser tipo caractere.
Saudações,
Mario.
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Tutorial de SQL
O detalhe é este: é um campo numérico comum.
Apenas na inclusão é que pode deixar por conta do MySQL fazer a numeração.
Pode fazer:
INSERT INTO CLIENTES ( IdCodigo, Nome ) VALUES ( 10, "JOSE" )
ou:
INSERT INTO CLIENTES ( NOME ) VALUES ( "JOSE" )
E pra saber o código que foi atribuído, em seguida é fazer:
SELECT LAST_INSERT_ID()
Apenas na inclusão é que pode deixar por conta do MySQL fazer a numeração.
Pode fazer:
INSERT INTO CLIENTES ( IdCodigo, Nome ) VALUES ( 10, "JOSE" )
ou:
INSERT INTO CLIENTES ( NOME ) VALUES ( "JOSE" )
E pra saber o código que foi atribuído, em seguida é fazer:
SELECT LAST_INSERT_ID()
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/
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/