Principais sintaxes

    Create table

    CREATE TABLE album(
    albumartist INT(3) PRIMARY KEY,
    albumnome VARCHAR(50),
    albumdescri VARCHAR(100)
    );

    CREATE TABLE musicas(
    musicaid INT(3),
    musicaartist VARCHAR(50),
    musicanome VARCHAR(30),
    FOREIGN KEY(musicaid) REFERENCES album(albumartist)
    );

  • Insert
  • INSERT INTO album(albumartist , albumnome , albumdescri ) VALUES (123, 'Belos sons', 'Musicas Brasileiras');
    INSERT INTO musicas(musicaid , musicaartist , musicanome) VALUES (123, 'Gilberto Gil', 'Se eu quiser falar com Deus');
    INSERT INTO musicas(musicaid , musicaartist , musicanome) VALUES (123, 'Gilberto Gil', 'Andar com Fe');



  • Select
  • SELECT * FROM album;

    SELECT * FROM musicas WHERE musicaid='123'

  • Update
  • UPDATE album SET albumnome="Belas cancoes" WHERE albumartist=123;



  • DELETE
  • DELETE FROM musicas WHERE musicanome="Andar com Fe";

Tipos de Dados

    Os tipos de dados aceitos pelo OpenSQL são:

  • INT ou INTEGER
  • CHAR, VARCHAR, TEXT, CHARACTER ou VCHAR - Se não especificar o tamanho, assume o tamanho default de 80.
  • NUMERIC, DEC ou DECIMAL
  • REAL
  • FLOAT ou DOUBLE
  • DATE
  • TIMESTAMP
  • BOOLEAN - boolean armazena 0 (false) e 1 (true) e não .f. ou .t.
  • NULL


  • Exemplo
  • CREATE TABLE funcionarios (id_func INT, nome_func CHAR(50), data_nasc DATE, data_valida TIMESTAMP)

    INSERT INTO funcionarios VALUES (1, 'joao da silva', '12/10/1953', '17/09/2015-09:02:30')

    SELECT * FROM funcionarios

    PHP

    Utilizando a biblioteca php_open.so (Linux) ou php_open.dll (Windows), é possível executar query's em PHP em uma base de dados OpenBase.
    Veja a baixo as funções:


    open_connect - Abre uma conexão
    Descrição:
    $db = open_connect (<banco>)
    retorna uma identificação de conexão do tipo resource ou FALSE se erro.

    conexão : string do tipo “HST=<ip>;DSN=<nome>;SEC=<segur>;LEV=<nivel>;MOD=<modo>”
    usuário : corresponde à palavra de nível.
    password : corresponde ao código de segurança


    open_close - Termina uma conexão
    Descrição:
    bool open_close ( resource id_conexão)
    retorna TRUE se sucesso, FALSE se erro.

    id_conexão : identificação da conexão do tipo resource


    open_query - executa um comando SQL
    Descrição:
    $db = open_exec( resource id_conexão, string query)
    retorna uma identificação de resultado do tipo resource ou FALSE se erro

    id_conexão : identificação de uma conexão aberta
    query : texto do comando SQL


    open_fetch_row - lê a proxima linha de um conjunto resultado em um vetor numéricamente indexado.
    Descrição:
    array open_fetch_row( resource id_resultado )
    retorna um array numérico se existe a linha, senão retorna FALSE

    id_resultado : identificador de resultado devolvido por uma chamada open_query para um comando SQL do tipo SELECT.

    open_fetch_row retorna a próxima linha de um conjunto resultado . Cada coluna é armazenada numa célula de uma array. O primeiro índice é igual a zero.


    open_fetch_assoc – lê a proxima linha de um conjunto resultado em um vetor associativo
    Descrição:
    array open_fetch_assoc(resouce id_resultado)
    retorna um array associativo se existe a linha, senão retorna FALSE.

    id_resultado : identificador de resultado devolvido por uma chamada
    open_query para um comando SQL do tipo SELECT.

    Assim como a função open_fetch_row, open_fetch_assoc lê a próxima linha, com a diferença que cada coluna é armazenada numa célula de um array que é indexado pelo nome da coluna ao invés da posição da coluna.


    open_num_fields - devolve o número de colunas de uma linha
    Descrição:
    int open_num_fields ( resource id_resultado);
    retorna número de colunas ou FALSE se erro.

    id_resultado : identificador de resultado devolvido por uma chamada open_query .


    Se o número de colunas retornados for igual a zero, o comando SQL executado, não é um comando SELECT.


    open_affected_rows – número de linhas alteradas
    Descrição :
    int open_affected_rows(resource id_resultado);
    retorna número de linhas alteradas ou FALSE se erro

    id_resultado : identificador de resultado devolvido por uma chamada open_query para um comando SQL .


    A função se aplica para os comandos SQL que alteram dados como INSERT, DELETE e UPDATE.


    open_num_rows –Retorna o número de linhas em um conjunto de resultados
    Descrição :
    int open_num_rows(resource id_resultado);
    retorna o número de linhas no conjunto de resultados id_resultado


    open_field_name – devolve o nome de uma coluna
    Descrição:
    string open_field_name(resource id_resultado, int coluna);
    retorna nome da coluna ou FALSE se erro

    id_resultado : identificador de resultado devolvido por uma chamada open_query para um comando SQL do tipo SELECT.
    coluna : número da coluna do conjunto resultado(a partir de zero)


    open_field_type – devolve o tipo de uma coluna
    Descrição:
    string open_field_type(resource id_resultado, int coluna);
    retorna nome da coluna ou FALSE se erro

    id_resultado : identificador de resultado devolvido por uma chamada open_query para um comando SQL do tipo SELECT.
    coluna : número da coluna do conjunto resultado(a partir de zero)


    open_field_length – devolve o tamanho interno de uma coluna
    Descrição:
    int open_field_length(resource id_resultado, int coluna);
    retorna tamanho da coluna ou FALSE se erro

    id_resultado : identificador de resultado devolvido por uma chamada open_query para um comando SQL do tipo SELECT.
    coluna : número da coluna do conjunto resultado(a partir de zero)

    O tamanho interno equivale ao número de bytes que é retornado à uma aplicação.



    open_free_result - libera recursos de um conjunto resultado
    Descrição:
    bool free_result ( resource id_resultado )
    retorna sempre TRUE

    id_resultado : identificador de um conjunto resultado


    open_last_error – Devolve a última mensagem de erro produzida
    Descrição:
    string open_last_error();
    retorna um string contendo a última mensagem de erro gerada . Se não houve erro, uma mensagem vazia é retornada.

    Exemplo PHP

    $con = open_connect("EXEMPLO") or die("erro");
    $q = open_query($con, "SELECT * FROM PESSOA");
    $n = open_num_rows($q);
    if($n > 0){
    while($campos = open_fetch_assoc($q)){
    $nome = $campos['NOME_P'];
    echo $nome;
    }
    }else{
    echo "nao tem registro";
    }
    $r = open_close($con);

    Exemplo PHP - PDO
    $db=new PDO("OpenSQL:DSN=EXEMPLO;");
    if ($db==NULL)
    echo ("db nulo");
    $st=$db->prepare("select * from PESSOA");

    if ($st==NULL)
    echo ("st nulo");
    try {
    $st->execute();
    $rs=$st->fetchAll();
    }
    catch (PDOException $e){
    print "Erro";
    die();
    }
    //print_r($rs);
    foreach ($rs as $row){
    echo $row['NOME_P'] . ' - ' . $row['IDADE'];
    }

    Telas do OpenSQL

    Tela com várias conexões criadas


    Tela exibindo estrutura do banco Exemplo


    Tela exibindo estrutura do banco OpenSQL_teste


    Tela exibindo tela de inserção de registros


    Tela exibindo registros de uma tabela


    Tela de Login


    C#

    • DLL's e instalador

    • O OpenSQL possui DLLs de acesso a uma base de dados local ou cliente/servidor via C#. Os arquivos acompanham o instalador instopen.exe que facilita a instalação das DLLs, basta executá-lo como na figura a seguir.





    • Exemplo de aplicação em C#




    • Download do Projeto: Crud_opensql.rar


      Dentro do projeto está o Cadastro.sql com a estrutura a baixo:

      CREATE TABLE Contatos (
      id int NOT NULL PRIMARY KEY AUTOINCREMENT,
      nome varchar(50) default NULL,
      email varchar(100) default NULL,
      PRIMARY KEY (id)
      )

      Você também pode usar o bdshell para criar o banco e executar a query.

    OPUS com SQL embutido

    Para acessar um banco OpenSql foram desenvolvidas na Opus as funções numéricas:

    Vamos trabalhar com o seguinte esquema


      

    <vn>=open_connect(<pointdb>,<banco>)

    <vn>=open_close(<pointdb>)

    onde <banco> é o nome do banco ou uma string de conexão do tipo:

                    “HST=...;DSN=...;SEC=...;LEV=…;

    Ex.:

    prog

    pointer db

    rc = open_connect(db, "./teste_db")

    rc = open_close(db)

                Para executar uma query e acessar os dados há 3 maneiras:

    1) Os dados retornam linha a linha:

    <vn>=open_prepare(<pointerdb> , <sql>, <pointstmt>)   <vn>=open_step(<pointstmt>)

              <vn>=open_column_count(<pointstmt>)

              <vc>=open_column_name(<pointerstmt>,<indcol>)

              <vc>=open_column_text(<pointerstmt>,<indcol>)

              <vn>=open_finalize(<pointerstmt>)

    Ex.:

    prog

    pointer db

    pointer st

    rc=open_connect(db,"./teste_db")

    com="select * from Produto where id_produto<3"

    rc=open_prepare(db,com,st)

    nc=open_column_count(st)

    rc=open_step(st)

    do while rc=100

      for i=1 to nc

        ? open_column_name(st,i-1),"=",open_column_text(st,i-1)

      next

       ? “ “             

      rc=open_step(st)

    enddo

    rc=open_finalize(st)

    rc=open_close(db)

    O resultado será:

    id_fornec=1

    nome=Apple

    telefone=2252-8574

    cidade=Rio de Janeiro

    id_fornec=2

    nome=HP

    telefone=6524-8574

    cidade=Curitiba

    2) Os dados retornam num vetor:
              <vn>=open_get_table (<pointdb>,<sql>,<vetpoint>,<nlin>,<ncol>)
              <pointdb> e <sql> são variáveis de entrada
              <vetpoint>, <nlin> e <ncol> são variáveis de saída
              <vn>=open_free_table(<vetpointer>)
    Ex.:
    prog
    pointer db
    rc = open_connect (db, "./teste_db")
    com = "select * from Produto"
    nlin = 0
    ncol = 0
    decl pointer vp[] = NULL
    rc = open_get_table (db, com, vp, nlin, ncol)
    for i=1 to nlin
      k =(i-1)*ncol
      for j=1 to ncol
        ?? vp[k+j],"|"
      next
      ? “ “
    next
    rc = open_free_table (vp)   
    rc = open_close(db)

    O resultado será:
    id_produto|descricao|qtd|cod_fornecedor|
    1|mouse óptico|15|3|
    2|teclado flexível|2|1|
    3|Monitor 15”|9|3|
    4|Impressora 3d|6|2|

    3) Os dados retornam na tela ou em arquivo separados por caracteres “|”
         <vn>=open_exec(pointdb>,<sql>[,<arqtxt>]))
    Ex.:
    pointer db
    rc=open_connect(db,"./teste_db)
    com="select * from Produto"
    rc=open_exec(db,com)
    rc=open_close(db)

    4) Funções auxiliares retornando cadeia
      <vc>=open_column_database_name(<pointstmt>)
      <vc>=open_column_table_name(<pointstmt>)
      <vc>=open_column_origin_name(<pointstmt>)

    Para alterar um registro:
    prog
    pointer db
    r = open_connect(db, "../teste_db")
    r = open_exec(db,[update Fornecedor set nome="OpenSql" where id_fornec=1])
    rc=open_close(db)

    E para excluir:
    prog
    pointer db
    r = open_connect(db, "../teste_db")
    r = open_exec(db,[delete from Fornecedor where id_fornec=2])
    rc=open_close(db)

    JAVA - JDBC

      O OpenSQL possui JDBC que é responsável por implementar o acesso aos bancos criados em OpenSQL.

      É possível utilizar IDEs (Interface Development Environment) como Netbeans ou Eclipse. Essas IDEs nada mais são do que editores ricos em recursos usados para desenvolver aplicações gráficas como Swing e aplicações web.

    • Exemplo de aplicação em Java - Download do Projeto

    ODBC

    Você pode utilizar ferramentas como Ibexpert, Dbgate, ODBCQueryTool, SqlDbx, ODBC_Qry para administrar uma base de dados via ODBC.
    Faça uma conexao ODBC. Entre no Painel de Controle -> Ferramentas Administrativas -> Fontes de dados (ODBC)
    Baixe aqui as versões 32 e 64 bits


      


    Agora, basta utilizar a ferramenta de sua preferência. Acompanhe as telas abaixo:
    Ibexpert
    ODBCQueryTool
    ODBC_Qry
    Dbgate
     

    Instalação e Configuração

    Instalação e Configuração Windows
    O OpenSql contém apenas uma versão para ambas plataformas.O que será a diferente será a biblioteca php_open.dll para windows e o open_php.so para linux.

    Após baixar o OpenSql, você precisará do ambiente WEB instalado. Se não tiver prática, pode instalar o wampserver ou baixe o apache e o php.

    Edite o arquivo php.ini e adicione a linha php_extension=php_open.dll e copie o arquivo php_open.dll para o diretório ext do php. Reinicie o apache e pronto!

  • Instalação e Configuração Linux

  • Baixe a biblioteca php_open.so e copie para /usr/lib/php/modules. Esse PATH é para padrão Red Hat.
    Edite o arquivo /etc/php.ini e adicione a linha php_extension=php_open.so. Reinicie o apache e pronto!
    Abra um browser de sua preferência e digite por exemplo:

    http://localhost/opensql ou http://192.168.10.1/opensql

    Uma pasta com o nome opensql será criada dentro da pasta do apache. Se não especificarmos o caminho onde será criado o banco de dados, é nesta pasta que os arquivos serão criados.

    Utilitário bdshell

    O utilitário bdshell é a versão SQL do utilitário geral do OpenBase. Útil para executar query's em uma base de dados.
    Para iniciarmos, vamos tomar como exemplo o seguinte esquema:

    banco ./bd_teste 1
    nome: cliente e
    codigo (0) n10
    nome   u30
    data_nasc   u8
    dia (0) u2 pos data_nasc
    mes   u2 pos data_nasc+2
    ano   u4 pos data_nasc+4
    endereco   u30
    bairro   u20
    uf   u02
    pesquisa (0) u12 virtual(codigo,uf)

    A tabela contém campos POS e VIRTUAIS para que os exemplos fiquem mais completos.
    Depois do banco criado (define *), utilizaremos o bdshell assim:
    bdshell bd_teste para código de segurança e palavra de nível default.
    bdshell "DSN=bd_teste;SEC=1;LEV=palavra nivel" para código de segurança e palavra de nível não default.

    Veja a imagem abaixo com operações de SELECT, INSERT e UPDATE após abrir o banco:




    Vejamos:

    No SQL não existe campos POS e VIRTUAIS, o que causa certa confusão ao utilizar o SQL do OpenBase. Por isso, no insert não os citaremos.

    Ex INSERT: INSERT INTO cliente VALUES(123,'Jose',10,12,1980,'Av Rio Branco','Centro','RJ'); ou se preferir
    INSERT INTO cliente(codigo, nome, dia, mes, ano, endereco, bairro, uf) VALUES (345,'Maria',15,10,2000,'Rua Sacadura', 'Copacabana','RJ');
    Note que omitimos os campos POS E VIRTUAIS.
    Para quem já tem habilidades com o GERAL, não terá dificuldades pois é similar.

    Ainda na imagem acima, temos um UPDATE que segue a mesma regra do INSERT.
    Ex UPDATE: UPDATE cliente SET nome='Carlos' WHERE codigo=123;

    Ex SELECT: Uma vantagem que temos é poder executar um SELECT nos campos POS E VIRTUAIS, além dos normais ou básicos é claro.
    Nos exemplos abaixo, data_nasc é um campo POS e pesquisa um campos VIRTUAL.



    Estas query's podem ser usadas em scripts PHP.

    * Define - > linguagem de definição de banco de dados OpenBase

    * Para usar o SQL do OpenBase, deve executar o utilitário bdsqli -b banco para criar o .db.

    Uma vez criado o .db, o define passará a perguntar se deseja criá-lo novamente sempre após uma mudança no esquema.
     
    Vamos executar CREATE TABLE e inserir uns registros e exluí-la posteriormente.

     
    Para exportarmos o resultado de uma query, fazemos assim: