18 Jul 2017 20:31
#require "hbsqlit3"
PROCEDURE Main()
LOCAL db := sqlite3_open( "dados.db", .T. ) // .T. = criar banco se não existir
LOCAL tabcliente := "CREATE TABLE cliente( " +;
" idcliente INTEGER PRIMARY KEY AUTOINCREMENT, " +;
" nome CHAR(100), "+;
" idade INTEGER, "+;
" dtnascimento DATE ); "
LOCAL tabusuario := "CREATE TABLE usuario( " +;
" idusuario INTEGER PRIMARY KEY AUTOINCREMENT, " +;
" nome CHAR(100), "+;
" senha CHAR(15), "+;
" nivel INTEGER NOT NULL DEFAULT (1) ); "
IF sqlite3_exec( db, tabcliente ) == SQLITE_OK
? " Tabela clientes criada com sucesso..."
ENDIF
IF sqlite3_exec( db, tabusuario ) == SQLITE_OK
? " Tabela usuario criada com sucesso..."
ENDIF
sqlite3_sleep( 3000 )
RETURN
20 Jul 2017 16:36
#require "hbsqlit3"
PROCEDURE Main()
LOCAL db := sqlite3_open( "novodb.db", .T. ) // .T. = criar banco se não existir
Local sql := ""
LOCAL tabcliente := "CREATE TABLE cliente( " +;
" idcliente INTEGER PRIMARY KEY AUTOINCREMENT, " +;
" nome CHAR(100), "+;
" idade INTEGER, "+;
" dtnascimento DATE ); "
LOCAL tabusuario := "CREATE TABLE usuario( " +;
" idusuario INTEGER PRIMARY KEY AUTOINCREMENT, " +;
" nome CHAR(100), "+;
" senha CHAR(15), "+;
" nivel INTEGER NOT NULL DEFAULT (1) ); "
IF sqlite3_exec( db, tabcliente ) == SQLITE_OK
? " Tabela clientes criada com sucesso..."
ENDIF
IF sqlite3_exec( db, tabusuario ) == SQLITE_OK
? " Tabela usuario criada com sucesso..."
ENDIF
// vamos adicionar dados ao banco
sql := CrudAdd()
IF sqlite3_exec( db, sql ) == SQLITE_OK
? " Novos usuarios cadastrados..."
? "Numero Linhas incluídas: " + hb_ntos( sqlite3_changes( db ) )
? "Total Alterações: " + hb_ntos( sqlite3_total_changes( db ) )
ELSE
? "Erro: ao gravar novos usuários"
ENDIF
sqlite3_sleep( 6000 )
RETURN
Function CrudAdd(sql)
sql := " " + ;
"BEGIN TRANSACTION;" + ;
"INSERT INTO usuario ( nome, senha , nivel ) VALUES( 'Carlos', '999999', 3 );" + ;
"INSERT INTO usuario ( nome, senha ) VALUES( 'Jose', '123' );" + ;
"INSERT INTO usuario ( nome, senha ) VALUES( 'Simone', '123' );" + ;
"INSERT INTO usuario ( nome, senha ) VALUES( 'Zeca', '123' ); " + ;
"COMMIT;"
RETURN (sql)
05 Set 2018 18:49
#include <hmg.ch>
#include "hbclass.ch"
#require "hbsqlit3"
CREATE CLASS tCliente
DATA ccBancoDados INIT "dados.db"
DATA ccTabela INIT "cliente"
DATA ccDB INIT NIL
// todas colunas da tabela
DATA idcliente INIT 0
DATA nome INIT ""
DATA idade INIT 0
DATA dtnascimento INIT CTOD("0001/01/01")
METHOD New(cArqDB) CONSTRUCTOR
METHOD CriarTabela()
METHOD Inserir()
ENDCLASS
*---------------------------------------------------------------------------
METHOD New(cArqDB) CLASS tCliente
*---------------------------------------------------------------------------
LOCAL retdb
cArqDB := IF( Empty( cArqDB ), ::ccBancoDados, cArqDB )
retdb := sqlite3_open( cArqDB, .T. ) // .T. = criar se não existir
IF Empty( retdb )
MsgInfo("Não foi possível criar banco de dados: " + ::ccBancoDados)
Return NIL
ENDIF
::ccDB := retdb
::CriarTabela() //self executa metodo CriarTabela dessa classe
Return Self // construtor retorna self
*---------------------------------------------------------------------------
METHOD CriarTabela() CLASS tCliente
*---------------------------------------------------------------------------
LOCAL cSql := "CREATE TABLE IF NOT EXISTS "+ ::ccTabela +"( " +;
" idcliente INTEGER PRIMARY KEY AUTOINCREMENT, " +;
" nome CHAR(100), "+;
" idade INTEGER, "+;
" dtnascimento DATE ); "
sqlite3_exec( ::ccDB, cSql )
IF sqlite3_errcode( ::ccDB ) > 0 // error executar SQL
MsgStop( sqlite3_errmsg(::ccDB ) +" SQL : " + cSql)
Return .f.
ENDIF
Return Nil
*---------------------------------------------------------------------------
METHOD Inserir() CLASS tCliente
*---------------------------------------------------------------------------
LOCAL retdb
LOCAL cSql :=""
LOCAL dt_nascimento := DTOS( ::dtnascimento )
dt_nascimento :=SUBSTR(dt_nascimento,1,4)+ "-"+;
SUBSTR(dt_nascimento,5,2)+ "-"+;
SUBSTR(dt_nascimento,7,2) //ajusta data aaaa-mm-dd (efeito colateral SET DATE)
cSql := "INSERT INTO "+ ::ccTabela +"( " +;
" nome , idade, dtnascimento ) " +;
"VALUES ( " +;
"'" + ::nome +"', "+;
" " + AllTrim(Str(::idade)) +" , "+;
"'" + dt_nascimento +"'); "
sqlite3_exec( ::ccDB, cSql )
IF sqlite3_errcode( ::ccDB ) > 0 // error executar SQL
MsgStop( sqlite3_errmsg(::ccDB ) +" SQL : " + cSql)
Return .f.
ENDIF
Return .T.
06 Set 2018 19:37
*---------------------------------------------------------------------------
METHOD Listar( cComplemento ) CLASS tCliente
*---------------------------------------------------------------------------
LOCAL cSql, cRet
LOCAL aDados := {}
cComplemento := IF(cComplemento == Nil, "", cComplemento)
cSql := "SELECT * FROM "+ ::ccTabela +" " + cComplemento
cRet := sqlite3_prepare( ::ccDB, cSql )
DO WHILE sqlite3_step( cRet ) == 100 // SQLITE_ROW 100 tem outra linha pronta
aLinha := {}
AADD( aLinha, sqlite3_column_int( cRet, 1 ) ) // idcliente
AADD( aLinha, sqlite3_column_text( cRet, 2 ) ) // Nome
AADD( aLinha, sqlite3_column_int( cRet, 3 ) ) // Idade
AADD( aLinha, sqlite3_column_text( cRet, 4 ) ) // dtnascimento
AADD(aDados, aLinha)
ENDDO
sqlite3_clear_bindings( cRet )
sqlite3_finalize( cRet )
Return ( aDados )
alista := {}
alista := oCliente:Listar()
msginfo( Len(alista) ) // total itens listados
msginfo( alista[1] ) // linha UM completa
msginfo( alista[1][2] ) // linha UM item DOIS (nome)
10 Set 2018 12:14
*---------------------------------------------------------------------------
METHOD Atualizar( nIDcliente ) CLASS tCliente
*---------------------------------------------------------------------------
LOCAL retdb
LOCAL cSql :=""
LOCAL dt_nascimento := DTOS( ::dtnascimento )
IF (nIDcliente == Nil .OR. nIDcliente = 0 )
Msginfo("ID cliente inválida")
Return .F.
ENDIF
dt_nascimento :=SUBSTR(dt_nascimento,1,4)+ "-"+;
SUBSTR(dt_nascimento,5,2)+ "-"+;
SUBSTR(dt_nascimento,7,2) //ajusta data aaaa-mm-dd
cSql := " UPDATE "+ ::ccTabela +" SET " +;
" nome = '" + ::nome +"', "+;
" idade = " + AllTrim(Str(::idade)) +" , "+;
" dtnascimento ='" + dt_nascimento +"' " +;
" WHERE idcliente = " + AllTrim(Str(nIDcliente)) + " ;"
sqlite3_exec( ::ccDB, cSql )
IF sqlite3_errcode( ::ccDB ) > 0 // error executar SQL
MsgStop( sqlite3_errmsg(::ccDB ) +" SQL : " + cSql)
Return .f.
ENDIF
Return .T.
oCliente:= tCliente():New() // instancia a classe
oCliente:nome := "Cliente da Silva Sauro" // envia valores p/ classe
oCliente:idade := 37
oCliente:dtnascimento := CTOD("09/09/2000")
nIDcli := 3
ret = oCliente:Atualizar(nIDcli) // chama método com parâmetro 3
IF (ret == .T. )
msg := "Registro: " + STR(nIDcli) + " Atualizado com sucesso."
ELSE
msg := "Registro: " + STR(nIDcli) + " Não atualizado/localizado. "
ENDIF
MsgInfo( msg )
11 Set 2018 14:25
*---------------------------------------------------------------------------
METHOD Excluir( nIDcliente ) CLASS tCliente
*---------------------------------------------------------------------------
LOCAL retdb
LOCAL cSql :=""
IF (nIDcliente == Nil .OR. nIDcliente = 0 )
Msginfo("ID cliente inválida")
Return .F.
ENDIF
cSql := " DEL FROM "+ ::ccTabela +;
" WHERE idcliente = " + AllTrim(Str(nIDcliente)) + " ;"
sqlite3_exec( ::ccDB, cSql )
IF sqlite3_errcode( ::ccDB ) > 0 // error executar SQL
MsgStop( sqlite3_errmsg(::ccDB ) +" SQL : " + cSql)
Return .f.
ENDIF
Return .T.
Function main
oCliente:= tCliente():New() // instancia a classe
nIDcli := 7
ret = oCliente:Excluir(nIDcli) // chama método com parâmetro 3
IF (ret == .T. )
msg := "Registro: " + STR(nIDcli) + " Excluído com sucesso."
ELSE
msg := "Registro: " + STR(nIDcli) + " Não foi Excluído/Localizado. "
ENDIF
MsgInfo( msg )
Return .T.
28 Set 2018 13:47
28 Set 2018 14:35
HASA escreveu::)) :D
Boa tarde, Susviela ainda utilizo DBF estou querendo migrar a tempos para um banco mais rápido e confiável ( claro ), o que gostei desse exemplo é saber que o Harbour embarcou o SGBD no executável criado, sempre foi meu dilema pois uso DBF que crio e atualizo campos sem problemas, acredito que pelo que estou vendo posso criar o banco de dados e no futuro precisando atualizar facilmente inserir novos campos na base de dados? Por exemplo a NF-e 4.0 criou novos campos que teremos que gravar em nosso BD´s crio e atualizo em DBF com "o pé nas costas" com esse SQLite posso fazer isso também?
Parabens por mais essa força,
:-Y
HASA
28 Set 2018 14:49
15 Jan 2020 12:16
15 Jan 2020 12:23
15 Jan 2020 16:49
15 Jan 2020 17:25
16 Jan 2020 17:08
susviela@bol.com.br escreveu:HASA escreveu:Um SQL Básico já resolveria
Incluir uma coluna:
ALTER TABLE cliente ADD COLUMN sexo char(1);
Mudar nome tabela:
ALTER TABLE cliente RENAME TO tbCliente;
Assim que tiver um tempinho vou publicar lá no blog uns exemplos SQLite.
https://programandoxbase.wordpress.com/
17 Jan 2020 12:26