MySQL duvidas?

Forum sobre SQL.

Moderador: Moderadores

Avatar do usuário
Amparo
Usuário Nível 3
Usuário Nível 3
Mensagens: 342
Registrado em: 20 Ago 2010 10:38
Localização: caieiras / sao paulo

MySQL duvidas?

Mensagem por Amparo »

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.

Código: Selecionar todos

    
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 do usuário
09466261000176
Usuário Nível 1
Usuário Nível 1
Mensagens: 39
Registrado em: 19 Mar 2014 15:50
Localização: lorena sp

MySQL duvidas?

Mensagem por 09466261000176 »

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 do usuário
09466261000176
Usuário Nível 1
Usuário Nível 1
Mensagens: 39
Registrado em: 19 Mar 2014 15:50
Localização: lorena sp

MySQL duvidas?

Mensagem por 09466261000176 »

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 do usuário
09466261000176
Usuário Nível 1
Usuário Nível 1
Mensagens: 39
Registrado em: 19 Mar 2014 15:50
Localização: lorena sp

MySQL duvidas?

Mensagem por 09466261000176 »

Na verdade é só aprender a ler, e gravar que você fica tranquilo tranquilo.
Avatar do usuário
Amparo
Usuário Nível 3
Usuário Nível 3
Mensagens: 342
Registrado em: 20 Ago 2010 10:38
Localização: caieiras / sao paulo

MySQL duvidas?

Mensagem por Amparo »

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 do usuário
Amparo
Usuário Nível 3
Usuário Nível 3
Mensagens: 342
Registrado em: 20 Ago 2010 10:38
Localização: caieiras / sao paulo

MySQL duvidas?

Mensagem por Amparo »

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

MySQL duvidas?

Mensagem por JoséQuintas »

DBF é uma coisa, MySQL é outra.

SELECT NOME, SETOR FROM USUARIOS ORDER BY NOME
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
Amparo
Usuário Nível 3
Usuário Nível 3
Mensagens: 342
Registrado em: 20 Ago 2010 10:38
Localização: caieiras / sao paulo

MySQL duvidas?

Mensagem por Amparo »

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 do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

MySQL duvidas?

Mensagem por fladimir »

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”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

MySQL duvidas?

Mensagem por rubens »

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

MySQL duvidas?

Mensagem por JoséQuintas »

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.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
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

MySQL duvidas?

Mensagem por fladimir »

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”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar do usuário
Amparo
Usuário Nível 3
Usuário Nível 3
Mensagens: 342
Registrado em: 20 Ago 2010 10:38
Localização: caieiras / sao paulo

MySQL duvidas?

Mensagem por Amparo »

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

MySQL duvidas?

Mensagem por JoséQuintas »

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.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
Amparo
Usuário Nível 3
Usuário Nível 3
Mensagens: 342
Registrado em: 20 Ago 2010 10:38
Localização: caieiras / sao paulo

MySQL duvidas?

Mensagem por Amparo »

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
Responder