Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.02.2010, 20:05   #1
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
Вопрос как правельно составить запрос к базе данных? не могу найти ошибку...

собственно есть dll плагин. от посылает данные в базу данных.
немогу правельно составить запрос к базе данных...
вот что имеется:
Код:
function SetBanUserInfo(UserBan: PBanRec): Integer; stdcall;
var
  rs: TResultSet;
  p: PBanRec;
  b: Boolean;
  i: Integer;
begin
  Result := -1;
  LastErrorText := '';
  if db = nil then Exit;
  if not db.Active then Exit; 
  if UserBan = nil then begin Result := -2; Exit; end;
  if UserBan^.HddSN = '' then begin Result := -3; Exit; end;
  p := UserBan;
  for i:=0 to 1 do begin
    rs := TResultSet.Create(db);
    try
      b := rs.FormatQuery('INSERT INTO '+DBRec.table1+' (player_id,player_ip,player_nick,admin_ip,admin_id,admin_nick,ban_type,ban_reason,ban_created,ban_length,server_name,server_ip, SteamId, UUID) '+
'VALUES (%s,%s,%s,%s,%s,%s,%s,''myAC'',''S'',%s,%s,%d,''myAC Anticheat'',%s,%s,%s,%s)', [p^.HddSN, p^.IPAddr, p^.Name, p^.Reason, SqlDT2Str(p^.DateTime), p^.min, p^.SteamId, p^.UUID]);
      if not b then begin
        if rs.FLastError <> 0 then begin
          Result := rs.FLastError;
          LastErrorText := '#' + IntToStr(rs.FLastError) + ': ' + rs.FLastErrorText;
          if rs.FLastError = 1046 then begin   //#1046 - No database selected
            if DBType = dbMySQL then
              if mydb.Use(DBrec.DataBase) then Continue else Result := -10461020;
          end;
        end;
      end else begin
        Result := 0;
      end;
    finally
      rs.Free;
    end;
    Break;
  end;
end;
в базу попытался внести 2 новых поля.. SteamID и UUID неполучилось..
вот что выдаёт:
Код:
<2010-02-25 16:27:34>  Error: SetBanUserInfo(S016J1QY701773) = 1064
<2010-02-25 16:27:34>  GetLastErrorMsg = "#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 '' at line 1"
как правельно оформить этот запрос?
Человек_Борща вне форума Ответить с цитированием
Старый 25.02.2010, 20:57   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Вы затрагиваете 14 столбцов таблицы (пересчитайте в скобках до VALUES), а в значений пихаете 18.
p51x вне форума Ответить с цитированием
Старый 27.02.2010, 13:58   #3
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию

я попробовал следующие варианты запросов...
Код:
     b := rs.FormatQuery('INSERT INTO '+DBRec.table1+' (player_id,player_ip,player_nick,admin_ip,admin_id,admin_nick,ban_type,ban_reason,ban_created,ban_length,server_name,server_ip,SteamId,UUID) '+
 'VALUES (%s,%s,%s,'''','''',''MyAC'',''S'',%s,%d,%d,''MyAC Anticheat'','''','''')', [p^.HddSN, p^.IPAddr, p^.Name, p^.Reason, SqlDT2Str(p^.DateTime), p^.min, p^.SteamId, p^.UUID]);
Код:
     b := rs.FormatQuery('INSERT INTO '+DBRec.table1+' (player_id,player_ip,player_nick,admin_ip,admin_id,admin_nick,ban_type,ban_reason,ban_created,ban_length,server_name,server_ip,SteamId,UUID) '+
 'VALUES (%s,%s,%s,'''','''',''MyAC'',''S'',%s,%d,%d,''MyAC Anticheat'','''',%s,%s)', [p^.HddSN, p^.IPAddr, p^.Name, p^.Reason, SqlDT2Str(p^.DateTime), p^.min, p^.SteamId, p^.UUID]);
Код:
     b := rs.FormatQuery('INSERT INTO '+DBRec.table1+' (player_id,player_ip,player_nick,admin_ip,admin_id,admin_nick,ban_type,ban_reason,ban_created,ban_length,server_name,server_ip,SteamId,UUID) '+
 'VALUES (%s,%s,%s,'''','''',''MyAC'',''S'',%s,%d,%d,''MyAC Anticheat'','''',%s,'''')', [p^.HddSN, p^.IPAddr, p^.Name, p^.Reason, SqlDT2Str(p^.DateTime), p^.min, p^.SteamId, p^.UUID]);
результат тот-же...
Код:
<2010-02-25 20:59:24>  Error: SetBanUserInfo(S016J1QY701773) = 1064
<2010-02-25 20:59:24>  GetLastErrorMsg = "#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 '' at line 1"
Человек_Борща вне форума Ответить с цитированием
Старый 27.02.2010, 14:35   #4
quit
Я есть!
Форумчанин
 
Аватар для quit
 
Регистрация: 17.02.2008
Сообщений: 318
По умолчанию

Возможно при передачи параметров передаются параметры с запрещенными символами. Советую под отладчиком зайти и посмотреть что там передается и в ручную на сервере попробовать выполнить запрос

EDIT
Код:
b := 
rs.FormatQuery('INSERT INTO '+DBRec.table1+' 
(player_id,player_ip,player_nick,admin_ip,admin_id,admin_nick,ban_type,ban_reason,ban_created,ban_length,server_name,server_ip, SteamId, UUID) '+
'VALUES (%s(1),%s(2),%s(3),%s(4),%s(5),%s(6),%s(7),''myAC'',''S'',%s(8),%s(9),%d(10),''myAC Anticheat'',%s(11),%s(12),%s(13),%s(14))', 
[p^.HddSN(1), p^.IPAddr(2), p^.Name(3), p^.Reason(4), SqlDT2Str(p^.DateTime)(5), p^.min(6), p^.SteamId(7), p^.UUID(8)]);
//число в параметров Values - 13, а передаешь 8
©Учиться, учиться и еще раз учиться!

Последний раз редактировалось quit; 27.02.2010 в 14:42.
quit вне форума Ответить с цитированием
Старый 27.02.2010, 15:21   #5
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию

просто dll хочу преписать, а разработчик запутанно и замудрено зделал=) попробую=)
Человек_Борща вне форума Ответить с цитированием
Старый 27.02.2010, 15:44   #6
quit
Я есть!
Форумчанин
 
Аватар для quit
 
Регистрация: 17.02.2008
Сообщений: 318
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
просто dll хочу преписать, а разработчик запутанно и замудрено зделал=) попробую=)
Скиньте хоть структуру таблицы что ли...
©Учиться, учиться и еще раз учиться!
quit вне форума Ответить с цитированием
Старый 27.02.2010, 17:22   #7
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию

вот структура
Код:
CREATE TABLE `amx_bans` (
  `bid` int(11) NOT NULL auto_increment,
  `player_ip` varchar(100) default NULL,
  `player_id` varchar(50) NOT NULL default '0',
  `player_nick` varchar(100) NOT NULL default 'Unknown',
  `admin_ip` varchar(100) default NULL,
  `admin_id` varchar(50) NOT NULL default '0',
  `admin_nick` varchar(100) NOT NULL default 'Unknown',
  `ban_type` varchar(10) NOT NULL default 'S',
  `ban_reason` varchar(255) NOT NULL default '',
  `ban_created` int(11) NOT NULL default '0',
  `ban_length` varchar(100) NOT NULL default '',
  `server_ip` varchar(100) NOT NULL default '',
  `server_name` varchar(100) NOT NULL default 'Unknown',
  `SteamId` varchar(20) NOT NULL,
  `UUID` varchar(32) NOT NULL,
  PRIMARY KEY  (`bid`),
  KEY `SteamId` (`SteamId`),
  KEY `UUID` (`UUID`),
  FULLTEXT KEY `UUID_2` (`UUID`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=238 ;
Человек_Борща вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу составить запрос bullvinkle SQL, базы данных 2 04.10.2009 22:55
Запрос к базе данных Table A-1_S БД в Delphi 10 03.09.2009 21:14
Не могу подконнектиться к базе данных. Extreme PHP 1 29.07.2009 19:45
Не могу найти ошибку! Эдуард Общие вопросы C/C++ 7 27.02.2008 16:34
Как правельно составить запрос!! Areostar SQL, базы данных 3 16.02.2008 19:49