Skocz do zawartości

  • Zaloguj korzystając z Facebooka Zaloguj korzystając z Twittera Zaloguj przez Steam Zaloguj poprzez Google      Logowanie »   
  • Rejestracja

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.

  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

[SQL] Nie tworzy Rekordów.


  • Zamknięty Temat jest zamknięty
8 odpowiedzi w tym temacie

#1 AmD

    aemde

  • Użytkownik

Reputacja: 71
Pomocny

  • Postów:500
  • Steam:steam
  • Imię:Dariusz
  • Lokalizacja:Częstochowa
Offline

Napisano 02.01.2011 01:38

Witam!

Od Kilku Dni Męczę się z zapisem SQL, idzie mi to coś marnie Ani Save Ani Load Rekordów nie działa, ale jak podłapię jak zrobić Save to i z Load Mi łatwiej pójdzie...

Problem w tym że wogóle. Nie tworzy Rekordów w bazie...
oto mój kod:


public SaveXP_SQL(id)
{
new PlayerName[32], str_query[1001]
new data[1]
new id = data[0]

if(!is_user_steam(id)){
get_user_name(id,PlayerName,charsmax(PlayerName));
}
else
{
get_user_authid(id,PlayerName,charsmax(PlayerName));
}
replace_all(PlayerName,31,"^"^^^"","6")
replace_all(PlayerName,31,"*","8")
replace_all(PlayerName,31,":","0")
replace_all(PlayerName,31,"-","4")
replace_all(PlayerName,31,"=","5")
replace_all(PlayerName,31,">","7")
replace_all(PlayerName,31,"<","1")
replace_all(PlayerName,31,"?","3")
replace_all(PlayerName,31,"'","2")

new len = format(str_query, 1000, "UPDATE `fbh_xp` SET (authid, xp, lvl, sptk, pgraw, pspeed, pfuria, pfizyk, pczar, pnc, fbhy, gz, lpm, s_prz, lpmt_os, s_lvl, s_graw, s_speed, lpmtos, os_scout, os_scout_s) VALUES (");
len += format(str_query[len], 1000 - len, "'%s', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d',", PlayerName, PlayerXP[id], PlayerLevel[id], SkillPoints[id], PtkGraw[id], PtkSpeed[id], PtkFuria[id], PtkFizyk[id], PtkCzar[id], PtkNc[id]);
len += format(str_query[len], 1000 - len, " '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d');", marzenia[id], gratz[id], lpm[id], sprawdz_przejsca[id], lpmt_os[id], sprawdz_level[id], sprawdz_graw[id], sprawdz_speed[id], lpmtOS[id], os_scout[id], os_scout_s[id]);
SQL_ThreadQuery(g_SqlTuple,"SaveHandler",str_query);

}
public SaveHandler(FailState, Handle:Query, Errorcode, Error[], Data[], DataSize)
{
if(Errorcode)
log_amx("[SaveXP] SQL: Blad w zapytaniu: %s", Error)

switch(FailState)
{
case TQUERY_CONNECT_FAILED: log_amx("[SaveXP] SQL: Nie mozna podlaczyc sie do bazy danych. Blad: %i : %s",Errorcode,Error)
case TQUERY_QUERY_FAILED: log_amx("[SaveXP] SQL: Zapytanie anulowane. Blad: %i : %s",Errorcode,Error)
}

return PLUGIN_CONTINUE
}


Co tutaj jest źle?

Pozdrawiam!

Użytkownik AmD edytował ten post 02.01.2011 01:39

  • +
  • -
  • 0

#2 R3X

    Godlike

  • Przyjaciel

Reputacja: 2960
Godlike

  • Postów:4247
  • Lokalizacja:Nie
Offline

Napisano 02.01.2011 01:48

robisz update, a on działa na istniejących danych; nowy gracz potrzebuje insertu :P jeśli go masz, a nie chciałeś się pochwalić to nie ma co go dłużej ukrywać
  • +
  • -
  • 1

#3 AmD

    aemde

  • Autor tematu
  • Użytkownik

Reputacja: 71
Pomocny

  • Postów:500
  • Steam:steam
  • Imię:Dariusz
  • Lokalizacja:Częstochowa
Offline

Napisano 02.01.2011 02:09

a nie mam :D

czyli jak mam to zrobić?

zamiast UPDATE dać INSERT i zamiast:

SQL_ThreadQuery(g_SqlTuple,"SaveHandler",str_query);

dać np:

SQL_ThreadQuery(g_SqlTuple,"UpdateHandler",str_query);


i tam dać UPDATE?
  • +
  • -
  • 0

#4 ReKsiu

    Zaawansowany

  • Użytkownik

Reputacja: 18
Początkujący

  • Postów:85
Offline

Napisano 02.01.2011 09:26

format(str_query, 1000, "UPDATE `fbh_xp` SET

UPDATE zamień na INSERT
  • +
  • -
  • 1

#5 mgr inż. Pavulon

    C35H60Br2N2O4

  • Przyjaciel

Reputacja: 1725
Godlike

  • Postów:6881
  • Steam:steam
  • Imię:Konrad
  • Lokalizacja:Koniecpol
Offline

Napisano 02.01.2011 13:32

format(str_query, 1000, "UPDATE `fbh_xp` SET

UPDATE zamień na INSERT

I zrób inny błąd...
UPDATE a INSERT różnią się strukturą.

UPDATE tabela SET wartości
INSERT INTO tabela VALUES wartości

SQL INSERT INTO Statement
SQL UPDATE Statement
  • +
  • -
  • 1

#6 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6034
Godlike

  • Postów:10832
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 02.01.2011 13:50

MySQL :: MySQL 5.0 Reference Manual :: 12.2.5.3 INSERT ... ON DUPLICATE KEY UPDATE Syntax
  • +
  • -
  • 1

#7 AmD

    aemde

  • Autor tematu
  • Użytkownik

Reputacja: 71
Pomocny

  • Postów:500
  • Steam:steam
  • Imię:Dariusz
  • Lokalizacja:Częstochowa
Offline

Napisano 02.01.2011 17:02

a ja dalej nie rozumiem :help:


myślałem by zrobić tak:


if(SQL_MoreResults(Query) < 1)
{

formatex(str_query,1000,"INSERT INTO
}
else
{
formatex(str_query,1000,"UPDATE
}

czy to ma jakiś sens?

Pozdr.


@edit.


Chyba już rozumiem jak to mam zrobić, ale za to mam kolejny problem...
A mianowicie Plugin nie robi mi bazy danych, wyskakuje błąd:
[DB Maker] FASTBH SQL: BLAD SQL #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '`fbhy` INT(11) NOT NULL, `gz` INT(11) NOT NULL, `lpm` INT(11) NOT NULL, `s_prz` ' at line 1

oto mój kod tworzenia bazy:


new len = formatex(createinto, 1000, "CREATE TABLE IF NOT EXISTS `fbh_xp` (`sid` varchar(64) NOT NULL, `xp` INT(11) NOT NULL, `lvl` INT(11) NOT NULL, `sptk` INT(11) NOT NULL, `pgraw` INT(11) NOT NULL, `pspeed` INT(11) NOT NULL, `pfuria` INT(11) NOT NULL, `pfizyk` INT(11) NOT NULL, `pczar` INT(11) NOT NULL, `pnc` INT(11) NOT NULL, ")
len += formatex(createinto, 1000 - len, "`fbhy` INT(11) NOT NULL, `gz` INT(11) NOT NULL, `lpm` INT(11) NOT NULL, `s_prz` INT(11) NOT NULL, `lpmt_os` INT(11) NOT NULL, `s_level` INT(11) NOT NULL, `s_graw` INT(11) NOT NULL, `s_speed` INT(11) NOT NULL, `lpmtos` INT(11) NOT NULL, `os_scout` INT(11) NOT NULL, `os_scout_s` INT(11) NOT NULL)")
SQL_ThreadQuery(g_SqlTuple,"QueryHandle", createinto)

co tu jest źle?

Użytkownik AmD edytował ten post 02.01.2011 18:21

  • +
  • -
  • 0

#8 R3X

    Godlike

  • Przyjaciel

Reputacja: 2960
Godlike

  • Postów:4247
  • Lokalizacja:Nie
Offline

Napisano 02.01.2011 21:48

zindeksuj drugie wystąpienie formatowanego tekstu
len += formatex(createinto[len], 1000 - len

  • +
  • -
  • 1

#9 AmD

    aemde

  • Autor tematu
  • Użytkownik

Reputacja: 71
Pomocny

  • Postów:500
  • Steam:steam
  • Imię:Dariusz
  • Lokalizacja:Częstochowa
Offline

Napisano 02.01.2011 22:34

Dziękuję :)

Pomyśleć że prosty błąd może wprowadzić zamieszanie :)


@edit
Ok, To Wszystko, dzięki za pomoc.

Użytkownik AmD edytował ten post 03.01.2011 19:37

  • +
  • -
  • 0




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych