Skocz do zawartości
Minokon

SQLite - co to? Funkcje, polecenia, typy, przykłady.

Rekomendowane odpowiedzi

Witam, mam problem.

Zrobiłem zapytanie w OnGameModeInit po skompilowaniu wywala że za długie zapytanie. Zrobiłem zapytanie w strcat(zapytanie, "TREŚĆ");

strcat(zapytanie, "Ciąg dalszy");

i plik jest pusty :/

Znacie inny sposób zapisania tego ?

Myślałem nad INSERT INTO ale cienias jestem w SQL :P

Pozdrawiam

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

	Accounts = db_open("KONTA.db");
	new zapytanie[600];
	strcat(zapytanie,"CREATE TABLE IF NOT EXISTS `Gracze` ( `id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, `login` VARCHAR UNIQUE NOT NULL, `pass` VARCHAR NOT NULL,");
	strcat(zapytanie, "`Flow` INTEGER DEFAULT '0' NOT NULL, `BMX` INTEGER DEFAULT '0' NOT NULL , `LANG` INTEGER DEFAULT '1' NOT NULL, `Visible` INTEGER DEFAULT '0' NOT NULL,");
	strcat(zapytanie, "`Kolor` INTEGER DEFAULT '0' NOT NULL, `Plecaki` INTEGER DEFAULT '0' NOT NULL, `Kody` INTEGER DEFAULT '0' NOT NULL, `VisibleON` INTEGER DEFAULT '0' NOT NULL,");
	strcat(zapytanie, "`Obiekty` INTEGER DEFAULT '0' NOT NULL, `Sloty` INTEGER DEFAULT '0' NOT NULL, `Chowane` INTEGER DEFAULT '0' NOT NULL, `Czas` INTEGER DEFAULT '0' NOT NULL, `Vip` INTEGER DEFAULT '0' NOT NULL, `VipCzas` INTEGER DEFAULT '0' NOT NULL,");
	strcat(zapytanie, "`B1` INTEGER DEFAULT '0' NOT NULL, `B2` INTEGER DEFAULT '0' NOT NULL, `B3` INTEGER DEFAULT '0' NOT NULL, `B4` INTEGER DEFAULT '0' NOT NULL, `B5` INTEGER DEFAULT '0' NOT NULL,");
	strcat(zapytanie, "`S1` INTEGER DEFAULT '0' NOT NULL, `S2` INTEGER DEFAULT '0' NOT NULL, `S3` INTEGER DEFAULT '0' NOT NULL, `S4` INTEGER DEFAULT '0' NOT NULL, `S5` INTEGER DEFAULT '0' NOT NULL);");
	db_free_result(db_query(Accounts,zapytanie));

Chciałem cos w tym stylu. Z góry thx za pomoc

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

@Michalec a to nie jest zapytanie czasem do MySQL ?

INT

Pole do którego można zapisać liczbę (używaj SMALLINT dla małej liczby, lub BIGINT dla dużej).

można wiedzieć kiedy dokładnie należy używać SMALL a kiedy BIG ?

DECIMAL

Pole do którego można zapisać liczbę zmiennoprzecinkową (Float). Przy podawaniu wielkości tego pola, podajemy dwie liczby: długość liczby przed przecinkiem, i długość po przecinku, np. ('PosX' DECIMAL(10,6), ...).

UWAGA: Pierwsza liczba definiująca maksymalną wielkość musi być większa od drugiej.

nie rozumiem, to w końcu pierwsza liczba to długość liczby przed przecinkiem czy całej liczby wraz z przecinkiem

result[] - zmienna, do której ma zostać zapisany ciąg znaków (zawartość pola). Jeśli zawartością będzie zwykła liczba, trzeba będzie ją przekonwertować z ciągu znaków. Tak samo jak z liczbą Float.

to dlaczego w przykładzie wygląda jak by zwracało liczby?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Wiem wiem. Już poprawiłem zapytanie, lecz nie o zawartosc jest błąd tylko o sposób zapisania. Jeśli gotowe zapytanie wrzuce do SQLite Browsera to pójdzie, jeśli do mapy to za długie.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Długość String to max 1024, jeśli posiadasz za mało znaków, każde zapytanie możesz podzielić. Użyj ALTER TABLE po utworzeniu niepełnej tabeli.

Pozdrawiam!

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

ALLERT TABLE nie działa. Możesz skrócić  INTEGER i te inne, bo dla SQLite to nie ma znaczenia (przynajmniej ja nie zauważyłem).

Nie sądzę, że maksymalny string to 1024, ja w regulaminie się posługiwałem 3000-znakowym.

new zapytanie[600];

za mała tablica, daj więcej. Jeśli wywali błąd, zwiększ #pragma dynamic

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Ja polecam nie kombinować z tworzeniem tabeli przez SAMP, tylko korzystając z jakiegoś programu - SQLite Administrator czy inne. String na pewno nie jest limitowany do 1024...

#pragma dynamic 300500 // +500 bo mam jeszcze 2 tablice po 200
public OnGameModeInit()
{
	new str[300000];
	str[299999] = 'a';

	printf("%d", sizeof str);
	printf("%c", str[299999]);

Działa ;P

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Ja polecam tworzyć tabele przez skrypty. Może nie

CREATE TABLE IF NOT EXISTS xxx

ale zwykłe CREATE TABLE, potem zapytanie ze skryptu wyrzucić i zapisać w jakimś pliku .txt. Gdy potem będziesz chciał zmienić trochę tabelę np. jakieś pole dodać, ale nie chcesz, żeby lądowało na sam przód (jako pierwsze, chodzi tu o pierwszą kolumnę w browserach SQLite'a). Wprawdzie dane z poprzedniej tabeli będziesz musiał przekopiować (można skrypcik napisać) albo je utracić :P. Zresztą ja kiedyś sobie w SQLite Browser rysuję tabelkę, klikam Utwórz i... bam! Błąd skłądni! :P

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Eee.. Trudno za duzo roboty z tym troche. Fajnie gdyby był taki konverter jak z MTA do SAMP/Pawn  ;)

Zrobiłem sobie jeden pojazd za pomocą programu poleconego przez Minokon'a i sprawdzilem w bazie

jak wyglada kod, ale tam jakies "krzuki"  :) wiec sobie nie pozamieniam przez pawno.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Kolego, w jaki sposób "sprawdziłeś" tę bazę? Bo jak odpaliłeś np. w notatniku to oczywiste że będziesz mieć krzaki ;p

Bazę musisz otworzyć przy użyciu funkcji SA-MP i możesz pobierać z niej dane.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Minikon, jestem początkujący w tych SQL'ach 

Chodziło mi o to że np. za pomocą twojego programiku otwieram ta baze dodaje tam 1 auto pozniej zapisuje to

i odpalam ta baze (czymś - notatnikiem się nie da) żeby sprawdzic jak ten zapis autka wyglada i pozniej np wklejam sobie to do pawn i podmieniam inne autka a dalej kopiuje do bazy i zapisuje  czy tak się da ?

PS. A jakim programem to otworzyć ?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Tak się nie da. Otworzyć możesz tylko tym programem co podałem.

Żeby wczytać pojazd, możesz używać tego przykładowego kodu, ogólnie służy do tego funkcja db_query - czymś takim jak notatnikiem nie da się otworzyć, ani programem Pawno.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

sqlite w samp chodzi bardzo powoli wiec każdy system zapisu danych do plikow bedzie szybszy

miedzy innymi ten co napisales

jak się troche podszkolisz to polecam napisać własny system pod konkretną mapke i wtedy bedzie najszybciej

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

A jest coś w rodzaju Autoinsert(czy jakoś tak w mysql było) w sensie robię sobie bazę danych i każdy grać ma UID no i chciałbym żeby baza danych sama mi naliczała, abym nie musiał pobierać ilości wyników z bazy..

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Wiesz co, mogę Cię zapewnić że takie coś w SQLite istnieje, ale niestety nie pamiętam jak się taką kolumnę definiowało. W każdym razie inaczej niż w MySQL.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

@up: noł.

Jest taka "wbudowana" kolumna jak `rowid`, ona przechowuje UID rzędu. W MySQL nie ma wbudowanej, jest za to parametr właśnie AUTO_INCREMENT, który można przypisać jakiemuś polu.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Mam pytanie, aczkolwiek stworzyłem bazę za pomocą SQLite Browser i ten plik z bazą danych nie ma rozszerzenia .db, raczej, w ogóle nie ma. Więc jak będę otwierał bazę w gamemodzie, to mam wpisać w db_open tylko database, czy mimo to dopisać .db?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×