[Ajuda] SQLite nгo estб criando as tabelas
#1

Decidi largar o DOF2 e tentar aprender SQL, aprendi um pouco e a partir disso eu criei um sistema de registro/login em SQLite, ainda tenho algumas dъvidas em relaзгo ao database, como criar as tabelas e algumas outras coisas, pesquisando aqui no forum e no ****** eu vi muitas pessoas criarem o database no ongamemodeinit de diversas maneiras

Ex:
PHP код:
CREATE TABLE IF NOT EXISTS `PERSONAJES` (`NOMBREVARCHAR(25), `PUNTOSSMALLINT(5) DEFAULT 0, `KARMASMALLINT(5) DEFAULT 0, `POSXFLOAT DEFAULT 0.0, `POSYFLOAT DEFAULT 0.0, `POSZFLOAT DEFAULT 0.0, `SKINSMALLINT(3) DEFAULT 0
Ex2:
PHP код:
CREATE TABLE IF NOT EXISTS usuarios (idUsuario INTEGER PRIMARY KEY AUTOINCREMENTnombreUsuario TEXTemailUsuario TEXT
Ex3:
PHP код:
CREATE TABLE IF NOT EXISTS `"TABLENAME"`(`idint(11NOT NULL auto_increment PRIMARY KEY,`Vardasvarchar(30NOT NULL,`Slaptazodisvarchar(50NOT NULL 
Estou com algumas dъvidas sobre isso "AUTOINCREMENT", "INTEGER", "PRIMARY KEY", "NOT NULL", "VARCHAR(25)", "SMALLINT(5)" e "INT(11)", pode ser uma dъvida meio idiota a minha mas eu olhando aqui no forum vi alguns tуpicos de pessoas fazendo isso de jeitos diferentes, alguns usavam INT(11) e outros SMALLINT, INTEGETER etc....., Bem voltando ao assunto principal no qual eu abri esse tуpico, eu coloquei no ongamemodeinit pra criar as tabelas caso elas nгo existissem, sу que quando eu acessei o Database nгo tinha nenhuma tabela criada =/

PHP код:
    ServerDB db_open("accounts.db");
    new 
DBResult:Resultado;
    
Resultado db_query(ServerDB"CREATE TABLE IF NOT EXISTS `Usuarios` (`id` INTEGER PRIMARY KEY AUTO_INCREMENT, `Nome` TEXT NOT NULL, `Senha` TEXT NOT NULL, `Score` INTEGER DEFAULT 0 NOT NULL, \
    `POSX` FLOAT DEFAULT 0.0 NOT NULL, `POSY` FLOAT DEFAULT 0.0 NOT NULL, `POSZ` FLOAT DEFAULT 0.0 NOT NULL)"
);
    
db_free_result(Resultado); 
Quem puder ajudar ajudar ai , e malz pelo meu portuguкs horrнvel
Reply
#2

Sгo apenas algumas maneiras da sintaxe SQL que й bem versбtil.

INT significa integer, e atй onde eu saiba й obrigatуrio definir o tamanho da coluna. 11 й o mais utilizado porque й o comprimento de uma variбvel de 32bits.

SMALLINT й para inteiros menores, e atй onde eu saiba nгo existe no MySQL mas existe no SQLite. Provavelmente para ser mais otimizado.

INTEGER й o mesmo que INT, mas nгo sei se dб pra escrever assim em alguma consulta.

INTEGETER provavelmente erraram na digitaзгo.

PRIMARY KEY й importante pra caralho, faz com que a coluna primбria seja uma espйcie de "chave ъnica", servindo para otimizar e tornar cada linha ъnica.

AUTO INCREMENT significa que a cada nova linha adicionada na tabela, esse valor aumenta em um, pra ser usado na coluna primбria.

Sobre sua consulta, defina os tamamhos da coluna. Apenas TEXT nгo precisa de definiзao de tamanho.
Reply
#3

Quote:
Originally Posted by arakuta
Посмотреть сообщение
Sгo apenas algumas maneiras da sintaxe SQL que й bem versбtil.

INT significa integer, e atй onde eu saiba й obrigatуrio definir o tamanho da coluna. 11 й o mais utilizado porque й o comprimento de uma variбvel de 32bits.

SMALLINT й para inteiros menores, e atй onde eu saiba nгo existe no MySQL mas existe no SQLite. Provavelmente para ser mais otimizado.

INTEGER й o mesmo que INT, mas nгo sei se dб pra escrever assim em alguma consulta.

INTEGETER provavelmente erraram na digitaзгo.

PRIMARY KEY й importante pra caralho, faz com que a coluna primбria seja uma espйcie de "chave ъnica", servindo para otimizar e tornar cada linha ъnica.

AUTO INCREMENT significa que a cada nova linha adicionada na tabela, esse valor aumenta em um, pra ser usado na coluna primбria.

Sobre sua consulta, defina os tamamhos da coluna. Apenas TEXT nгo precisa de definiзao de tamanho.
Entendi, mas quando eu for definir uma String, por exemplo a senha, eu uso o VARCHAR ou o TEXT? e quando eu for definir uma Float para salvar a cordenada do Jogador eu uso qual? INT?

@edit

NOT NULL (Nгo Nulo) pra que serve?, eu dei uma pesquisada aqui mas eu nгo manjo muito de inglкs

@edit2

Consegui fazer criar as tabelas
Coloquei desse jeito "CREATE TABLE IF NOT EXISTS `Usuarios` (id INTEGER PRIMARY KEY AUTOINCREMENT, Nome TEXT, Senha TEXT, Score INT(11) DEFAULT 0 NOT NULL)", Ainda nгo sei pra que funciona o NOT NULL, mas eu dei uma pesquisada e descobri que DEFAULT й o valor padrгo, entгo coloquei DEFAULT 0 no Score para quando o Jogador se Registrar ele jб comeзar do nivel 0
Reply
#4

Eu comecei a usar SQLite a pouco tempo tambйm, jб tive alguns problemas na criaзгo e salvamento dos dados. Para mim ocorreu algo muito estranho, quando eu utilizo espaзos entre as virgulas ele nгo cria minhas tabelas e tambйm nгo salva. Achei esquisito, se vocк ver este link (https://sampwiki.blast.hk/wiki/Db_query) verбs que o wiki nгo utiliza espaзos, e somente utiliza INTEGER e VARCHAR, nada mais й preciso. A nгo ser que utilize valores flutuantes, se nгo me engano й utilizado REAL.

Caso vocк tenha dъvidas, procure exemplos da wiki, acho mais viбvel e me ajudou efetivamente.

Eu faзo dessa forma.::
Um Exemplo para carregar uma tabela.

PHP код:
new DBconexao_SQL;
CarregarDadosSQL()

    
conexao_SQL db_open("exemplo.db");
    if(
conexao_SQL == DB0)
    {
        print(
"|      Erro ao carregar Database      |");
        
SendRconCommand("exit");
    }
    else
    {
        print(
"|       Carregado com Sucesso!!       |");
        print(
"---------------------------------------");
        
db_free_result(db_query(conexao_SQL"CREATE TABLE IF NOT EXISTS `conta` (`id` INTEGER PRIMARY KEY AUTOINCREMENT,`usuario` VARCHAR(65) NOT NULL,`senha` VARCHAR(65) NOT NULL,`banido` INTEGER NOT NULL,`admin` INTEGER NOT NULL)"));
    }

Como faзo a consulta para salvar os dados.

PHP код:
SalvarConta(playerid)
{
    new 
query[250];
    
format(query250"UPDATE `conta` SET `banido`=%i,`admin`=%i WHERE `id`=%i",
        
Player[playerid][Banido],
        
Player[playerid][Admin],
        
Player[playerid][IDConta]);
    
    
db_free_result(db_query(conexao_SQLquery));
    return 
1;

Espero que isto ajude.


Obs: Estou dizendo o que ocorreu comigo, pode ser que a questгo do espaзo nгo seja o problema, eu possa ter feito algo errado, mas eu estou utilizando dessa forma e estou conseguindo salvar meus dados.
Reply
#5

Usa o VARCHAR para strings

Se vocк for salvar uma Float, use Float tambйm no SQL

Vocк sу usa INT para valores inteiros, como por exemplo, salvar o dinheiro de um player etc.
Reply
#6

Obrigado a Todos pela ajuda, consegui fazer criar as tabelas e tirei as dъvidas , Mas alguйm poderia me explicar pra que usar o NOT NULL?

e aproveitando aqui o tуpico sem precisar abrir outro, serб que alguem pode me ajudar nisso?

PHP код:
stock SalvarUsuario(playerid)
{
    new 
Query[240], DBResult:Resultado;
    
GetPlayerPos(playeridpInfo[playerid][PosX], pInfo[playerid][PosY], pInfo[playerid][PosZ]);
    
format(Querysizeof(Query), "UPDATE `Usuarios` SET Score = '%d', POSX = '%f', POSY = '%f', POSZ = '%f' WHERE `Nome` = '%q'",  GetPlayerScore(playerid), pInfo[playerid][PosX], pInfo[playerid][PosY], pInfo[playerid][PosZ], PegarNome(playerid));
    
Resultado db_query(ServerDBQuery);
    
db_free_result(Resultado);
    return 
1;

Fiz isso pra salvar os dados do Jogador sу que nгo ta salvando :P, ta certo?, eu usei o %q ao inves de %s pq eu tava lendo um tуpico e vi que й pra proteger contra SQL Injection

@edit

Desculpem o Double-Post

@edit2

Nгo ta salvando de jeito nenhum
Jб tentei por

PHP код:
"UPDATE `Usuarios` SET `Score`=%i,`POSX`=%f,`POSY`=%f,`POSZ`=%f WHERE `Nome` = %q" 
PHP код:
"UPDATE `Usuarios` SET Score = %i, POSX = %f, POSY= %f, POSZ =%f WHERE `Nome` = %q" 
PHP код:
"UPDATE `Usuarios` SET Score = %d, POSX = %f, POSY= %f, POSZ =%f WHERE `Nome` = %s" 
Num outro gamemode que eu peguei pra estudar estб assim a funзгo de salvar o jogador

PHP код:
stock SalvarUsuario(playerid)
{
    new 
Query[120];
    
format(Querysizeof(Query), "UPDATE `Usuarios` SET Dinheiro = %i"GetPlayerMoney(playerid));
    
db_query(ContasQuery);
    return 
1;

Tentei fazer do mesmo jeito e nгo funciona =/

Aqui estб o gamemode onde eu estou desenvolvendo o sistema: http://pastebin.com/01uyHa8w
Nгo estou conseguindo detectar algum erro, simplesmente nгo ta salvando =/
Reply
#7

Consegui arrumar

UPDATE Usuarios SET Score = %i, POSX = %f, POSY = %f, POSZ = %f WHERE Nome = '%q'

Simplesmente troquei `Usuarios` por Usuarios sem os ``, retirei os '' do %i e do %f deixando apenas no '%q'

Resolvido



SQLite й mt estranho ;-;, fiz de um jeito pra salvar num outro gamemode funcionou, sу que quando fui usar no meu gm atual nгo salvou os dados e tive que fazer de outro jeito =P
Reply
#8

Se vocк estб montando um GameMod agora, aconselho a usar MySQL ORM, vocк nгo precisarб fazer nenhuma Query.

E para salvar os dados dos jogadores basta fazer um timer de um segundo chamando a funзгo orm_update

https://sampwiki.blast.hk/wiki/MySQL/R33

Й bem simples, aqui no fуrum tem uns tutoriais ensinando.
Reply
#9

Quote:
Originally Posted by CaioTJF
Посмотреть сообщение
Se vocк estб montando um GameMod agora, aconselho a usar MySQL ORM, vocк nгo precisarб fazer nenhuma Query.

E para salvar os dados dos jogadores basta fazer um timer de um segundo chamando a funзгo orm_update

https://sampwiki.blast.hk/wiki/MySQL/R33

Й bem simples, aqui no fуrum tem uns tutoriais ensinando.
Obrigado pela sugestгo, vou procurar aqui pois infelizmente ainda estou tendo problemas com SQLite

> https://sampforum.blast.hk/showthread.php?tid=499336
Reply
#10

Opa, agora que vi que me esqueci de falar sobre o NOT NULL.

Й auto explicativo, significa que o campo nгo pode ficar sem valor, lembrando que uma string vazia nгo й nula. Isso se aplica a valores inteiros, floats, etc, onde NOT NULL geralmente forзa um DEFAULT 0 ou um erro na hora de fazer a consulta dependendo do servidor SQL utilizado.

Por via das dъvidas sempre defina um valor padrгo, DEFAULT para cada coluna.

Um outra dica que eu dou, й instalar o XAMPP no seu computador, criar o banco de dados via interface do PHPMyAdmin, depois exportar o SQL e pegar a query de construзгo, que jб vem completa com todos os valores padrхes e outras definiзхes da tabela.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)