Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 06.04.2011, 22:17
akimov_aleks akimov_aleks вне форума
Прохожий
 
Регистрация: 09.01.2010
Сообщения: 28
Репутация: 10
По умолчанию проверка на унекальность в таблице при добовлении

Привет всем.... не могу понять как проверить есть ли такая же запись в бд

есть таблица в нее добовляю данные как сделать проверку есть ли такиее данные в таблице
id ключевое поле и есть nomer текстовое оно тоже унекальное тоесть при добовлении в таблицу надо проверить нет ли в поле nomer такого же числа если нет то добавить если есть то не добовляем
PHP код:
form1.ADOQuery1.SQL.Clear;
    
form1.ADOQuery1.SQL.Create;
    
form1.ADOQuery1.SQL.Add('insert into tabli(nomer,rnn,title_tovar,title_kontora) values ('''+nomer+''','''+rnn+''','''+title_tovar+''','''+title_kontora+''')');
    
form1.ADOQuery1.ExecSQL
попытался обеснить на ломаном руском...
Ответить с цитированием
  #2  
Старый 06.04.2011, 23:46
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

[off]"унекальность", "добовлении"... а почему у Вас проблема с русским?[/off]
попробуй поюзать разные вариации "select..."
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #3  
Старый 07.04.2011, 01:18
Assistant Assistant вне форума
Продвинутый
 
Регистрация: 20.02.2011
Адрес: там где правят идиоты
Сообщения: 603
Версия Delphi: 7
Репутация: выкл
По умолчанию

вот как-то так (мож где-то и ошибся, хз, на лету писал, но смысл должен быть понятен):
Код:
var
  cnt: integer;
begin
  ........................

  ADOQuery1.SQL.Text = 'SELECT COUNT(*) AS cnt FROM tabli WHERE nomer = ' + #39+nomer+#39;
  ADOQuery1.SQL.Open;
  cnt := ADOQuery1.FieldByName('cnt').AsInteger;
  ADOQuery1.SQL.Close;

  if cnt = 0 then
  begin
    ADOQuery1.SQL.Text = 'INSERT INTO tabli(nomer,rnn,title_tovar,title_kontora) VALUES '+
                         (' + #39+nomer+#39+','+#39+rnn+#39+','+#39+title_tovar+#39+','+#39+title_kontora+#39+')';
    ADOQuery1.ExecSQL;  
  end else
    ShowMessage('Такая запись уже есть в таблице! Нихера не уникально');
end;

P.S.: так и не понял к чему было form1.ADOQuery1.SQL.Create;
__________________
взялся из неоткуда, ничего не прошу, помогаю просто так
ICQ: 593977748 - стучать в случае КРАЙНЕЙ необходимости, ну, или если вы со Ставрополя

Последний раз редактировалось Assistant, 07.04.2011 в 01:25.
Ответить с цитированием
  #4  
Старый 07.04.2011, 15:31
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Ну вот так можно:
Код:
ADOQuery1.SQL.Text := 'select * from tabli where nomer=:nomer and rnn=:rnn and title_tovar=:title_tovar and title_kontora=:title_kontora';
ADOQuery1.Parameters.ParamValues['nomer'] := nomer;
ADOQuery1.Parameters.ParamValues['rnn'] := rnn;
ADOQuery1.Parameters.ParamValues['title_tovar'] := title_tovar;
ADOQuery1.Parameters.ParamValues['title_kontora'] := title_kontora;
ADOQuery1.Open;
if not ADOQuery1.isEmpty then ShowMessage('Есть уже такая');
А еще можно просто создать уникальный индекс на таблицу и обрабатывать ошибку вставки повторного значения.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #5  
Старый 07.04.2011, 17:44
akimov_aleks akimov_aleks вне форума
Прохожий
 
Регистрация: 09.01.2010
Сообщения: 28
Репутация: 10
По умолчанию

что то не то.....
Ответить с цитированием
  #6  
Старый 07.04.2011, 17:48
Black Raider Black Raider вне форума
Местный
 
Регистрация: 31.05.2010
Адрес: Москва
Сообщения: 466
Версия Delphi: 7
Репутация: 40
По умолчанию

В каком смысле что то не то?

в запросе который дал Страдалецъ ответ на ваш вопрос присутствует


Код:
ADOQuery1.SQL.Text := 'select Nomer from tabli where nomer=:nomer ';
ADOQuery1.Parameters.ParamValues['nomer'] := nomer;
ADOQuery1.Open;
__________________
Новый вирус - "БОМЖ"! Он просто роется в Корзине...и спит под ярлычком "Сетевое окружение"
Ответить с цитированием
  #7  
Старый 07.04.2011, 18:56
akimov_aleks akimov_aleks вне форума
Прохожий
 
Регистрация: 09.01.2010
Сообщения: 28
Репутация: 10
По умолчанию

я делаю это в одельном потоке....
и ругаеться на Form1.ADOQuery1.Open;[Error] Unit2.pas(95): Missing operator or semicolon
Ответить с цитированием
  #8  
Старый 07.04.2011, 22:17
Assistant Assistant вне форума
Продвинутый
 
Регистрация: 20.02.2011
Адрес: там где правят идиоты
Сообщения: 603
Версия Delphi: 7
Репутация: выкл
По умолчанию

так у вас ошибка синтаксиса, где-то не хватает '
__________________
взялся из неоткуда, ничего не прошу, помогаю просто так
ICQ: 593977748 - стучать в случае КРАЙНЕЙ необходимости, ну, или если вы со Ставрополя
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

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

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:44.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter