Clipper On Line • Ver Tópico - Facilitar criação de tabela no fonte

Facilitar criação de tabela no fonte

Discussão sobre SQL

Moderador: Moderadores

 

Facilitar criação de tabela no fonte

Mensagempor JoséQuintas » 11 Set 2016 22:26

Tá tudo bem, funcionando direito, mas queria deixar isto mais reduzido.

STATIC FUNCTION JPPREHISCreateMySql()

   RETURN ;
   "CREATE TABLE IF NOT EXISTS JPPREHIS ( " + ;
   "PHID     INT(11)      NOT NULL AUTO_INCREMENT, " + ;
   "PHITEM   VARCHAR(6)   NOT NULL DEFAULT '', " + ;
   "PHCADAS  VARCHAR(6)   NOT NULL DEFAULT '', " + ;
   "PHFORPAG VARCHAR(6)   NOT NULL DEFALT '', " + ;
   "PHDATA   DATE         NULL, " + ;
   "PHHORA   VARCHAR(8)   NOT NULL DEFAULT '', " + ;
   "PHVALOR  DOUBLE(16,4) NOT NULL DEFAULT '0', " + ;
   "PHOBS    VARCHAR(60)  NOT NULL DEFAULT '', " + ;
   "PHINFINC VARCHAR(80)  NOT NULL DEFAULT '', " + ;
   "PHINFALT VARCHAR(80)  NOT NULL DEFAULT '', " + ;
   "PRIMARY KEY    ( PHID ), " + ;
   "INDEX IDXITEM  ( PHITEM, PHCADAS, PHFORPAG, PHDATA DESC, PHHORA DESC ), " + ;
   "INDEX IDXCADAS ( PHCADAS, PHITEM, PHFORPAG, PHDATA ), " + ;
   "INDEX IDXDATA  ( PHDATA, PHITEM, PHCADAS, PHFORPAG ) " + ;
   ") COLLATE=latin1_swedish_ci ENGINE=InnoDB"


Parece que qualquer tentativa de reduzir isso acaba causando um fonte difícil de "enxergar".
Alguém conseguiu algo interessante pra isso?

Notas:
- A estrutura do DBF parece não resolver, porque é mais limitada
- O índice faz parte da estrutura no SQL
- O único inconveniente assim é gastar espaço de string no EXE, nem sei uma alteração vai economizar alguma coisa no resultado final.
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: 10018
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 6 vezes
Mens.Curtidas: 641 vezes

Facilitar criação de tabela no fonte

Mensagempor rubens » 13 Set 2016 08:32

Quintas...

Ignorância minha, isso aí por exemplo não poderia ser utilizado em STORE PROCEDURES ?

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

rubens
Colaborador

Colaborador
 
Mensagens: 1343
Data de registro: 16 Ago 2003 09:05
Cidade/Estado: Nova Xavantina - MT
Curtiu: 61 vezes
Mens.Curtidas: 80 vezes

Facilitar criação de tabela no fonte

Mensagempor JoséQuintas » 13 Set 2016 09:35

A intenção é: criou a base de dados pronto, o aplicativo faz o resto, sem intervenção manual.
Pra existirem as stored procedures, precisaria algo mais já na base de dados.
(sem falar que ainda não aprendi isso.... 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: 10018
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 6 vezes
Mens.Curtidas: 641 vezes

Facilitar criação de tabela no fonte

Mensagempor JoséQuintas » 13 Set 2016 11:21

Só voltando um pouco ao assunto:

Minha intenção é o aplicativo continuar criando tudo do zero.
Praticamente só defino o nome do banco de dados, usuário e senha, e o aplicativo faz o resto.
Tá equivalente a:
IF .NOT. File( "arquivo.dbf" )
   dbCreate( "arquivo.dbf", ... )
ENDIF
IF .NOT. File( "arquivo.cdx" )
   INDEX ON ...
ENDIF


Pra usar stored procedures (rotinas dentro da base), depende das rotinas existirem, o que seria equivalente a já existir um banco de dados com conteúdo.
Mas e aí? Como essas stored procedures chegariam ao banco de dados? Se for pra copiar uma base pronta, tanto faz se for stored procedure ou a base com as tabelas prontas.
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: 10018
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 6 vezes
Mens.Curtidas: 641 vezes

Facilitar criação de tabela no fonte

Mensagempor alxsts » 13 Set 2016 14:05

Olá!

Um recurso que pode ser usado para evitar as concatenações de strings e melhorar a legibilidade deste tipo de código é o comando TEXT. Veja exemplo:
//------------------------------------------------------------------------------

STATIC FUNCTION ScriptGenerator()

   LOCAL cSql As Character
   LOCAL aRet As Array

   aRet := {}

   TEXT INTO cSql
      USE [Harbour]

      /****** Object:  Table [dbo].[tbAddressType]    Script Date: 09/04/2014 20:18:23 ******/
      SET ANSI_NULLS ON
      SET QUOTED_IDENTIFIER ON
      SET ANSI_PADDING ON

      CREATE TABLE [dbo].[tbAddressType](
         [idAddressType] [int] IDENTITY(1,1) NOT NULL,
         [dsAddressType] [varchar](20) NOT NULL,
       CONSTRAINT [XPKtbAddressType] PRIMARY KEY CLUSTERED
      (
         [idAddressType] ASC
      )WITH (PAD_INDEX = ON, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80) ON [PRIMARY]
      ) ON [PRIMARY]

      SET ANSI_PADDING OFF
   ENDTEXT

   AAdd( aRet, cSql )

   // demais tabelas...

RETURN aRet
   //---------------------------------------------------------------------------


Depois executa cada um dos scripts:
TablesGenerator( ScriptGenerator() )


//------------------------------------------------------------------------------

STATIC FUNCTION TablesGenerator( aScripts )

   LOCAL cSql As Character
   LOCAL lRet As Logical

   lRet := .F.
     
   Try
      oCn:Open()

      For Each cSql In aScripts
         oCn:Execute( cSql )
      Next

      lRet := .T.
     
   Catch oErr
      Throw( oErr )
   Finally
      If oCn:state() = adStateOpen
         oCn:Close()
      Endif
   End

RETURN lRet
//------------------------------------------------------------------------------

A sintaxe acima é do MS SQL Server.
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2152
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 13 vezes
Mens.Curtidas: 142 vezes

Facilitar criação de tabela no fonte

Mensagempor JoséQuintas » 13 Set 2016 18:31

Não deu certo, mas lembrando que a string vai ficar maior ainda, já que até os espaços em branco iriam contar.
Tentei isto:

STATIC FUNCTION JPPREHISCreateMySql( cTxt )

   TEXT INTO cTxt
      CREATE TABLE IF NOT EXISTS JPPREHIS (
      PHID     INT(11)      NOT NULL AUTO_INCREMENT,
      PHITEM   VARCHAR(6)   NOT NULL DEFAULT '',
      PHCADAS  VARCHAR(6)   NOT NULL DEFAULT '',
      PHFORPAG VARCHAR(6)   NOT NULL DEFAULT '',
      PHDATA   DATE         NULL,
      PHHORA   VARCHAR(8)   NOT NULL DEFAULT '',
      PHVALOR  DOUBLE(16,4) NOT NULL DEFAULT '0.0',
      PHOBS    VARCHAR(60)  NOT NULL DEFAULT '',
      PHINFINC VARCHAR(80)  NOT NULL DEFAULT '',
      PHINFALT VARCHAR(80)  NOT NULL DEFAULT '',
      PRIMARY KEY    ( PHID ),
      INDEX IDXITEM  ( PHITEM, PHCADAS, PHFORPAG, PHDATA DESC, PHHORA DESC ),
      INDEX IDXCADAS ( PHCADAS, PHITEM, PHFORPAG, PHDATA ),
      INDEX IDXDATA  ( PHDATA, PHITEM, PHCADAS, PHFORPAG )
      ) COLLATE=latin1_swedish_ci ENGINE=InnoDB
   ENDTEXT

   RETURN cTxt


Como não aceita a TEXT INTO cTxt, dá erro em todo resto.

rccriamysql.prg:632: error E0030 Syntax error "syntax error at 'INTO'"

rccriamysql.prg:633: error E0030 Syntax error "syntax error at 'TABLE'"

rccriamysql.prg:634: error E0030 Syntax error "syntax error at 'INT'"

rccriamysql.prg:635: error E0030 Syntax error "syntax error at 'VARCHAR'"

rccriamysql.prg:636: error E0030 Syntax error "syntax error at 'VARCHAR'"

rccriamysql.prg:637: error E0030 Syntax error "syntax error at 'VARCHAR'"
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: 10018
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 6 vezes
Mens.Curtidas: 641 vezes

Facilitar criação de tabela no fonte

Mensagempor JoséQuintas » 13 Set 2016 18:41

Talvez uma opção seja incluir todos os comandos como resource.
Vou testar depois.
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: 10018
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 6 vezes
Mens.Curtidas: 641 vezes

Facilitar criação de tabela no fonte

Mensagempor alxsts » 13 Set 2016 19:10

Olá!

Funciona perfeitamente com o Harbour 3.2. Certamente o problema de não aceitar TEXT INTO é no Harbour 3.4. Precisa ver o que o Viktor pode fazer para compatibilizar as duas versões.
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2152
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 13 vezes
Mens.Curtidas: 142 vezes

Facilitar criação de tabela no fonte

Mensagempor JoséQuintas » 13 Set 2016 20:00

Correção: Isso é do xHarbour.

#include "hbcompat.ch"

PROCEDURE Main

LOCAL x

TEXT INTO x
   sdfsfdsdfds
   sdfsdfsdsfds
   sdfsdfdsfsdfds
ENDTEXT

CLS
? x

RETURN


hbmk2 test xhb.hbc
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: 10018
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 6 vezes
Mens.Curtidas: 641 vezes

Facilitar criação de tabela no fonte

Mensagempor alxsts » 23 Set 2016 13:03

Olá!

Este código que postei foi escrito faz anos e nem me lembrava deste include (hbCompat.ch).
JoséQuintas escreveu:Correção: Isso é do xHarbour.

Correto. Na minha opinião, este fato não inviabiliza o uso do comando, que é uma tradução conseguida através do pré processador, como todos os comandos xBase.
   /* TEXT INTO <varname> */
   #xcommand TEXT INTO <v> => #pragma __text|<v>+=%s+hb_eol();<v>:=""
Penso que o ganho em legibilidade justifica o uso (evita aquelas concatenações de strings horrorosas).
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2152
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 13 vezes
Mens.Curtidas: 142 vezes

Facilitar criação de tabela no fonte

Mensagempor wmanesco » 06 Out 2016 23:53

Olá pessoal!

Recentemente venho desenvolvendo uma classe com este intuito, de criar tabelas. Ainda não está finalizada mas está criando tabelas simples e não possui metodos para criar indices ainda.

Apenas para exemplificar vou mostrar como seria o uso e caso alguem se interesse coloco o código para download em algum local.
Lembrando que não está tão robusto.

A idéia é a seguinte:

   oClientes := DBTables():new( "clientes" )

   oClientes:int("id"):notNull():autoIncrement():uniqueIndex():primaryKey() //Adiciona um campo INT not null, auto increment, unique Index e primary Key.
   oClientes:string( "razao_social", 100 ):notNull() //adiciona um VARCHAR de tamanho 100 e not null
   oClientes:string( "telefone", 11 ) adiciona um VARCHAR de tamanho 11
   oClientes:string( "ie", 11 )
   oClientes:string( "cnpj", 15 )
   oClientes:string( "endereco", 150 )
   oClientes:string( "cep", 8 )
   oClientes:date("datacadastro") // adiciona um campo data
   oClientes:decimal("limite", 11, 2) // adiciona um decimal 11, 2 )
   oClientes:create()


Funciona assim: Cada vez que chamo um comando ele vai guardando os campos em um array de objetos (cada tipo é um objeto), chamando o create() corre o array e monta uma string de inserção no banco.

Estou trabalhando quando é possível para criar um método de update, assim seria muito simples alterar campos nas tabelas sem precisar ficando alter table, mas estou encontrando algumas dificuldades de desenvolver este método.

Desenvolvi com a idéia base com que funciona um framework para php(que esqueci o nome agora kk)

Abraços.
William Manesco
Harbour 3.x | Fivewin | BCC | MySQL (TDolphin) | HBQT | HBIDE | Atom
wmanesco
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 118
Data de registro: 09 Set 2016 13:18
Cidade/Estado: ITAJAI - SC
Curtiu: 13 vezes
Mens.Curtidas: 4 vezes

Facilitar criação de tabela no fonte

Mensagempor wmanesco » 07 Out 2016 00:05

Lembrei o nome do framework php, é laravel!
William Manesco
Harbour 3.x | Fivewin | BCC | MySQL (TDolphin) | HBQT | HBIDE | Atom
wmanesco
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 118
Data de registro: 09 Set 2016 13:18
Cidade/Estado: ITAJAI - SC
Curtiu: 13 vezes
Mens.Curtidas: 4 vezes

Facilitar criação de tabela no fonte

Mensagempor jairfab » 07 Out 2016 10:13

wmanesco, tem como você disponibilizar eu fiquei interessado pois estou fazendo a conversão de um sistema DBF para banco de dados FIREBIRD e tenho muitas tabelas para ser criadas
Delpji 7, harbour 3.2, xharbour 1.2.3, Bcc7, Minigw, Minigui 17.12, hwgui 2.20, FiveWin 17.11 Gtwvw, Gtwvg, C# VS 2017
Avatar de usuário

jairfab
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 178
Data de registro: 21 Mai 2007 09:43
Cidade/Estado: São Paulo, Região Leste - Itaquera
Curtiu: 0 vez
Mens.Curtidas: 8 vezes

Facilitar criação de tabela no fonte

Mensagempor wmanesco » 07 Out 2016 11:37

Assim que conseguir subir eu post o link aqui!
William Manesco
Harbour 3.x | Fivewin | BCC | MySQL (TDolphin) | HBQT | HBIDE | Atom
wmanesco
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 118
Data de registro: 09 Set 2016 13:18
Cidade/Estado: ITAJAI - SC
Curtiu: 13 vezes
Mens.Curtidas: 4 vezes

Facilitar criação de tabela no fonte

Mensagempor wmanesco » 07 Out 2016 13:40

William Manesco
Harbour 3.x | Fivewin | BCC | MySQL (TDolphin) | HBQT | HBIDE | Atom
wmanesco
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 118
Data de registro: 09 Set 2016 13:18
Cidade/Estado: ITAJAI - SC
Curtiu: 13 vezes
Mens.Curtidas: 4 vezes

Próximo



Retornar para SQL

Quem está online

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


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