Tutorial de SQL

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

Avatar do usuário
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

Tutorial de SQL

Mensagem por Vlademiro »

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

Tutorial de SQL

Mensagem por JoséQuintas »

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,
Na prática é um bom começo pra aprendizado.

É 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
E algo parecido para INSERT.
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
Mario Mesquita
Usuário Nível 4
Usuário Nível 4
Mensagens: 613
Registrado em: 08 Dez 2009 13:47
Localização: Rio de Janeiro

Tutorial de SQL

Mensagem por Mario Mesquita »

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.
Avatar do usuário
Mario Mesquita
Usuário Nível 4
Usuário Nível 4
Mensagens: 613
Registrado em: 08 Dez 2009 13:47
Localização: Rio de Janeiro

Tutorial de SQL

Mensagem por Mario Mesquita »

Valdomiro, valeu!

Agora que vi. Esse programa está no pacote do HMG 3.4.4, é um bom ponto de partida pra estudos.

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

Tutorial de SQL

Mensagem por JoséQuintas »

É 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.
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
Mario Mesquita
Usuário Nível 4
Usuário Nível 4
Mensagens: 613
Registrado em: 08 Dez 2009 13:47
Localização: Rio de Janeiro

Tutorial de SQL

Mensagem por Mario Mesquita »

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.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Tutorial de SQL

Mensagem por JoséQuintas »

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/
Avatar do usuário
Mario Mesquita
Usuário Nível 4
Usuário Nível 4
Mensagens: 613
Registrado em: 08 Dez 2009 13:47
Localização: Rio de Janeiro

Tutorial de SQL

Mensagem por Mario Mesquita »

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.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Tutorial de SQL

Mensagem por JoséQuintas »

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()
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