Clipper On Line • Ver Tópico - MySQL duvidas?

MySQL duvidas?

Discussão sobre SQL

Moderador: Moderadores

 

MySQL duvidas?

Mensagempor Amparo » 04 Abr 2014 14:18

ola amigos

pessoal, meu sistema é feito em harbour (DBF E CDX), estou convertendo para minigui, e quero rodar com um banco de dados, baixei o MySQL, cheguei a fazer um programa pegando meus DBF´s passando para o MySQL, não tenho conhecimento algum sobre qualquer banco de dados ou SQL, mas pesquisando aqui, obtendo ajuda de alguns colega ali, eu fiz meu programa para conversão da base de dados. Só que me surgiu algumas duvidas.

1) Em meu sistema uso DBSETFILTER e alguns LOCATE, pergunto: estes comandos podem ser substituídos por
SELECT * from clientes where cep ="07700-000" tem o mesmo efeito ou estou viajando.

2) Em rede quando vou alterar o cadastro de cliente uso CLIENTES->( DBRLOCK( RECNO() ) ) para travar o registro e depois CLIENTES->( DBRUnlock( RecNo() ) ) para destravar, no MySQL o travamento é automático?

3) No cadastro de cliente tenho um índice chamado cliente.cdx com varias tags, por exemplo:
ordem de CODIGO, NOME, CNPJ_CPF, CEP como faço para criar estes índices em MySQL, isso pode ou deve ser criado ao montar um estrutura da tabela no MySQL.
    
SELECT("CLIENTES")
aDbfStruct := CLIENTES->(DBSTRUCT())

TABESTRU := "("

FOR x = 1 TO LEN( aDbfStruct )
  IF aDbfStruct[x,2] = "C"
     TABESTRU += ALLTRIM( aDbfStruct[x,1] ) + " VARCHAR(" + ALLTRIM( STR( aDbfStruct[x,3] ) ) + ")"
  ELSEIF aDbfStruct[x,2] = "N"
     TABESTRU += ALLTRIM( aDbfStruct[x,1] ) + " SMALLINT(" + ALLTRIM( STR( aDbfStruct[x,3] ) ) + ")"
  ELSEIF aDbfStruct[x,2] = "D"
     TABESTRU += ALLTRIM( aDbfStruct[x,1] ) + " DATE"
  ELSEIF aDbfStruct[x,2] = "L"
     TABESTRU += ALLTRIM( aDbfStruct[x,1] ) + " ENUM('T','F')"
  ELSEIF aDbfStruct[x,2] = "M"
     TABESTRU += ALLTRIM( aDbfStruct[x,1] ) + " LONGTEXT"
  ENDIF

  IF x < LEN( aDbfStruct )
      tabestru += " , "
  ENDIF
NEXT x

TABESTRU += ")"

OSERVER:QUERY( "CREATE TABLE CLIENTES " + tabestru  + ";" )

IF OSERVER:NETERR()
    lError:=.T.
    MSGEXCLAMATION( OSERVER:Error(), "0" )
    exit
ENDIF


4) Meu sistema esta funcionando em um servidor win 2008 tendo a unidade C: e D:, em C: esta o sistema operacional e em D: somente as seguintes pastas: SISTEMA e USERS a unidade D: esta compartilha e mapeada como DADOS, nas estações faço apenas o mapeamento do servidor e crio um atalho na área de trabalho apontando para o mapeamento, pergunto

4.1) Onde devo instalar o MySQL em c: como é sugerido na instalação ou em D:? Algum macete?

4.2) Na maquina local para conectar ao banco de dados uso a seguinte sintaxe:
OSERVER:= TMYSQLSERVER():NEW( CSERVER, CUSER, CPASWD )
onde: CSERVER = LOCALHOST
e no servidor qual é a sintax? tem que mudar algum parâmetro de configuração do MySQL?

4.3) a pasta SISTEMA em D: contem a subpasta chamada DADOS, onde em SISTEMA fica o executável alguns arquivos INI e em DADOS as tabelas de CLIENTES, BANCOS, NOTAFISC, PRODUTOS, ETC ETC, fazia backup desta pasta diariamente, quando tinha algum problema como por exemplo corrupção de índice corrupção de campos memos, eu voltava a tabela que deu erro e pronto tudo voltava ao normal, e no MySQL como fazer copia (BACKUP) da tabela ou da base de dados? Como vou voltar apenas uma tabela? de que forma agir?

bem aqui esta algumas duvidas que ainda me deixam meio inseguro em usar o MySQL não pelo seu funcionamento e sim por ser leigo no assunto.

a versão que estou usando do MySQL é 5.1.3

obrigado antecipadamente a todos que puderem me ajudar.

abraços

Amparo
Avatar de usuário

Amparo
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 266
Data de registro: 20 Ago 2010 10:38
Cidade/Estado: caieiras / sao paulo
Curtiu: 0 vez
Mens.Curtidas: 0 vez

MySQL duvidas?

Mensagempor 09466261000176 » 11 Mai 2014 21:22

Saudações caro amigo. Já tive recentemente estas duvidas. Porém, consegui resolver quase todas. Eu uso uma LIB que converte os comandos xBASE para SQL ou seja, pode-se usar os dois. Desta forma, em nome do progresso tecnológico, passei a usar os comandos SQL e aboli de vez os antigos comandos de I-O do clipper. Se desejar pode me contatar que lhe ajudarei como o poco que aprendi. Não é muito, mas, dá para dividir. Consegui avançar tecnicamente com o uso do xHARBOUR juntamente com o FIVEWIN com IDE PELES e FASTREPORT, tudo isso com banco de dados MYSQL. Meu sistema é instalado no DESKTOP do cliente e acessa via IP o BANCO DE DADOS remoto. Funciona perfeitamente desde que haja um IP dedicado. Tamos ai se precisar. cpmgconsuloria@hotmail.com
Avatar de usuário

09466261000176
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 39
Data de registro: 19 Mar 2014 15:50
Cidade/Estado: lorena sp
Curtiu: 0 vez
Mens.Curtidas: 0 vez

MySQL duvidas?

Mensagempor 09466261000176 » 11 Mai 2014 21:36

Alguns exemplos.

Para localizar um registro no banco MYSQL

em clipper

IF nome_da_tabela->(DBSEEK(chave))

em sql

SELECT * FROM nome_da_tabela WHERE campo_na_tabela=variavel

toda tabela no MYSQL deve conter uma identificação que chamamos de ID. Que é um campo numerico de normalmente 10 bytes inteiros
este que na verdade acaba por identificar o registro nas pesquisas e é o que aponta de verdade para o registro tipo o RECNO()

veja um trecho de programa escrito para pesquisar um determinado dado via SQL no xharbour

IF SELECT('alunos') != 0
alunos->(DbCloseArea())
ENDIF
cQuery:=' SELECT * FROM alunos WHERE CPF = ' + TRANSFORMA_SQL(T_CPF,"T",14,0)
use sql cQuery alias 'alunos' new via 'MYSQL'
alunos->( DbGoTop())
IF ID_ALUNO > 0
LOCALIZOU O REGISTRO
ELSE
NÃO LOCALIZOU
ENDIF
Avatar de usuário

09466261000176
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 39
Data de registro: 19 Mar 2014 15:50
Cidade/Estado: lorena sp
Curtiu: 0 vez
Mens.Curtidas: 0 vez

MySQL duvidas?

Mensagempor 09466261000176 » 11 Mai 2014 21:37

Na verdade é só aprender a ler, e gravar que você fica tranquilo tranquilo.
Avatar de usuário

09466261000176
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 39
Data de registro: 19 Mar 2014 15:50
Cidade/Estado: lorena sp
Curtiu: 0 vez
Mens.Curtidas: 0 vez

MySQL duvidas?

Mensagempor Amparo » 12 Mai 2014 17:14

ola amigos

obrigado por responder, estou avançando aos poucos, mas tenho certeza que vou alcançar meu objetivos, alias graças a ajuda dos colegas do fórum, sem ela já teria desanimado.

mais uma vez obrigado

Amparo
Avatar de usuário

Amparo
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 266
Data de registro: 20 Ago 2010 10:38
Cidade/Estado: caieiras / sao paulo
Curtiu: 0 vez
Mens.Curtidas: 0 vez

MySQL duvidas?

Mensagempor Amparo » 23 Abr 2017 11:51

ola amigos

primeiramente gostaria de pedir desculpas por desenterrar este post, mas na ocasião tive vários problemas que me fizeram adiar a conversão do meu sistema DBF para BANCO DE DADOS.

estou fazendo novamente as conversões e estou apanhando um pouco com coisas simples como abaixo, já pesquisei em vários locais e não encontrei nada que satisfaça minhas duvida apenas explicações de otimizações:

tenho uma tabela de USUARIO com os seguintes campos:

id int not null auto_increment
nome varchar(15)
setor varchar(20)
senha ...
....
primary key (id)

create index idx_users_nome on usuarios(nome)

select nome,setor from usuarios

até aqui tudo certo faço uma consulta e jogo o resultado em um grid ( mas a ordem que aparece é João, Pedro, Alberto, Sandro, Antonio,Xavier,Jose...)

como eu faço para utilizar o INDICE que criei, tentei assim:

select nome,setor from usuarios use index ( idx_users_nome )

e não deu certo no grid a ordem veio toda bagunçada, imagine em uma tabela de vendas onde tenho os seguintes INDICES:
por ordem de pedido
por ordem de cliente
por ordem de emissão
...
estou perdido neste ponto

outra coisa é como saber quando um registro esta travado, ja tentei usar o SELECT .... com UPDATE e não funcionar abro um registro em dois micros e faço a alteração sem bloqueio algum.

se alguém puder emprestar a luz no fim do túnel eu agradeço

abraços a todos.
Avatar de usuário

Amparo
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 266
Data de registro: 20 Ago 2010 10:38
Cidade/Estado: caieiras / sao paulo
Curtiu: 0 vez
Mens.Curtidas: 0 vez

MySQL duvidas?

Mensagempor JoséQuintas » 23 Abr 2017 22:27

DBF é uma coisa, MySQL é outra.

SELECT NOME, SETOR FROM USUARIOS ORDER BY NOME
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 11583
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 12 vezes
Mens.Curtidas: 740 vezes

MySQL duvidas?

Mensagempor Amparo » 24 Abr 2017 09:47

ola amigos

José Quintas, obrigado por responder, agora desculpe minha ignorância mas... pra que criar indices, se vou usar ORDER BY e o nome do campo

criei a ordem por
create index idx_pedido on vendas (pedido)
create index idx_cliente on vendas (cliente)
create index idx_emissao on vendas (emissao)

ai faço a selecão

select pedido, cliente, emissao, vendedor from vendas order by CNPJ_CPF

em harbour eu uso
quando quero:
( Alias() )->( OrdSetFocus( idx_pedido ) )
quando quero:
( Alias() )->( OrdSetFocus( idx_cliente ) )
quando quero:
( Alias() )->( OrdSetFocus( idx_emissao ) )

onde esta a logica de criar indices em banco de dados se vou usar ORDER BY e o nome do campo

abraços
Avatar de usuário

Amparo
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 266
Data de registro: 20 Ago 2010 10:38
Cidade/Estado: caieiras / sao paulo
Curtiu: 0 vez
Mens.Curtidas: 0 vez

MySQL duvidas?

Mensagempor fladimir » 24 Abr 2017 09:55

Fiquei na dúvida tb, mas talvez agilizar qdo vc usar o Order By, tipo vc cria um índice e qdo fizer o order by, ele identifica q existe um indice com a mesma chave do Order by e como já esta criado agiliza o processo... agora isso formulei agora, talvez tenha viajado na maionese.

Alguém poderia esclarecer?
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


DESKTOP CONSOLE Harbour | MinGW | DBF | CDX | FastReport | MySQL
DESKTOP VISUAL... Harbour | MinGW | Xailer | MariaDB Nativo | FastReport
MOBILE Android/IOS e WEB - Windev Mobile 22
Avatar de usuário

fladimir
Colaborador

Colaborador
 
Mensagens: 2357
Data de registro: 15 Nov 2006 19:21
Curtiu: 25 vezes
Mens.Curtidas: 135 vezes

MySQL duvidas?

Mensagempor rubens » 24 Abr 2017 10:33

Bom dia...

Também gostaria de saber, porque isso sempre ficou duvidoso... como disse o Fladimir... se vai usar o order by (tá organizando aqui né) o índice fica sem importância...

obrigado

Rubens
"Eu e minha casa servimos ao Senhor e você ???"
Avatar de usuário

rubens
Colaborador

Colaborador
 
Mensagens: 1442
Data de registro: 16 Ago 2003 09:05
Cidade/Estado: Nova Xavantina - MT
Curtiu: 69 vezes
Mens.Curtidas: 93 vezes

MySQL duvidas?

Mensagempor JoséQuintas » 24 Abr 2017 10:57

DBF é apenas um arquivo.
MySQL é um aplicativo de gerenciamento de banco de dados.
Ao fazer o pedido ao MySQL, ele decide qual será o melhor índice pra ter velocidade na resposta (e de vez em quando precisa ajuda).
E se tem chave incremental, um índice por essa chave é obrigatório, justamente pra ser rápido fazer a checagem.

Poderia fazer sem índice nenhum que funciona.
Mas conforme a base vai crescendo, os índices vão ajudar a ter velocidade.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 11583
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 12 vezes
Mens.Curtidas: 740 vezes

MySQL duvidas?

Mensagempor fladimir » 24 Abr 2017 11:17

Então de certa forma é o q eu falei... vc cria o índice e no dia a dia o MySQL ve se usa ele ou não...
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


DESKTOP CONSOLE Harbour | MinGW | DBF | CDX | FastReport | MySQL
DESKTOP VISUAL... Harbour | MinGW | Xailer | MariaDB Nativo | FastReport
MOBILE Android/IOS e WEB - Windev Mobile 22
Avatar de usuário

fladimir
Colaborador

Colaborador
 
Mensagens: 2357
Data de registro: 15 Nov 2006 19:21
Curtiu: 25 vezes
Mens.Curtidas: 135 vezes

MySQL duvidas?

Mensagempor Amparo » 24 Abr 2017 12:09

ola amigos

a logica é interessante, vendo por este lado quando criamos o indice CREATE INDEX IDX_CNPJCPF ON CLIENTES(CNPJCPF) e ao fazer a consulta com ORDER BY (CNPJCPF) o banco procura se existe alguns indice criado com o campo especifico, é interessante.

agora não abusando, já vi vários assuntos sobre como travar um registro e como saber se ele esta travado mas não vi nenhuma resposta logica, bem na minha tabela de produtos tenho dois campos o 1o. chama ESTOQUE e o 2o. RESERVA, o ESTOQUE grava a quantidade de produtos que tenho na loja, o RESERVA grava a quantidade de produtos que esta sendo pedido, na hora que o usuário aprova um pedido ele diminuí a quantidade do ESTOQUE e soma na quantidade de RESERVA, se por acaso o cliente desistir da compra ai faço o inverso, então pergunto como faço para travar o registro que vou gravar esta informação em harbour travo com ( Alias() )->( DBRLock( RecNo() ) ) e depois destravo com ( Alias() )->( DBRUnlock( RecNo() ) )

bem a logica é: o usuario fica em loop tentando travar o registro, quando é liberado ele trava para o usuario e assim por diante.

abraços
Avatar de usuário

Amparo
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 266
Data de registro: 20 Ago 2010 10:38
Cidade/Estado: caieiras / sao paulo
Curtiu: 0 vez
Mens.Curtidas: 0 vez

MySQL duvidas?

Mensagempor JoséQuintas » 24 Abr 2017 12:56

Apesar de estar usando MySQL, estou usando pra somente algumas tabelas, que tem acesso mais limitado, mas tem muitos registros.
Imagino que talvez seja interessante criar uma flag nos registros pra controlar isso.

Quem estiver usando a plena carga pode dar uma idéia melhor das opções.
Inclusive não é a primeira vez que se fala nesse assunto, pode dar uma pesquisada em conversas anteriores.

Pois é... fiz uma pausa na conversão até instalar MySQL em todos os clientes, e esqueci de continuar.... rs
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 11583
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 12 vezes
Mens.Curtidas: 740 vezes

MySQL duvidas?

Mensagempor Amparo » 24 Abr 2017 15:17

ola amigos

pois é, esse travamento é que mais esta me preocupando em fazer a mudança de DBF para BD.

alguém no grupo usa MySQL em produção para dar uma luz.

abraços
Avatar de usuário

Amparo
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 266
Data de registro: 20 Ago 2010 10:38
Cidade/Estado: caieiras / sao paulo
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Próximo



Retornar para SQL

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 1 visitante


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
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro