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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.12.2007, 18:22   #1
POPOV
Форумчанин
 
Аватар для POPOV
 
Регистрация: 26.10.2007
Сообщений: 124
По умолчанию Проверка на дублирование в базе данных

Короче мне нужно было сделать простую базу данных с использованием 3-х DBGrid-ов ). Нужно было к каждой таблице сделать кнопку "Проверка на дублирование записи в таблице". Например в первой таблице проверка должна идти по полю "Практики". Т.е я заполняю таблицу практиками, и нажимая на ту кнопку выдается сообщение в случае если добавляемое название практики уже существует.

Код который у меня проверяет тока в том случае, если в названии практики нет пробелов, например "ООП". Если же у меня например уже добавлена запись "Базы данных" и я пытаюсь проверить на дублирование, программа считает, что такой записи нет и добаляет ей повторно.

Вот текущий код:

Код:
procedure TForm2.Button12Click(Sender: TObject);
var k:integer;
st:string[10];
begin
If Table1.State in [dsEdit,dsInsert] then
begin
Table1.Post;
k:=table1.RecNo;
st:=table1.FieldValues['Naimenovanie_practiki'];
end
else
begin
table1.Cancel;
showmessage('выбран неверный метод состояния таблицы');
exit;
end;
//showmessage(inttostr(k));
//showmessage(st);
table1.First;
while not table1.Eof do
begin
if (table1.FieldByName('Naimenovanie_practiki').AsString=st) and (table1.RecNo<>K) then
begin
table1.RecNo:=k;
if messagedlg('Дублирование записей. Удалить?',mtConfirmation,[mbYes,mbNo],0)=mrYes then
table1.Delete;
exit;
end;
table1.Next;
end;
showmessage('Запись добавлена');
end;
Кто подскажет, как изменить код чтобы программа реагировала на повторяющиеся записи с пробелами, так и без них .
POPOV вне форума Ответить с цитированием
Старый 03.12.2007, 19:01   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Используйте метод LOCATE и все ваши вопросы снимутся.
mihali4 вне форума Ответить с цитированием
Старый 03.12.2007, 19:31   #3
POPOV
Форумчанин
 
Аватар для POPOV
 
Регистрация: 26.10.2007
Сообщений: 124
По умолчанию

А где этот метод использовать ?
POPOV вне форума Ответить с цитированием
Старый 03.12.2007, 22:47   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Это стандартный метод датасета.
mihali4 вне форума Ответить с цитированием
Старый 03.12.2007, 23:27   #5
POPOV
Форумчанин
 
Аватар для POPOV
 
Регистрация: 26.10.2007
Сообщений: 124
По умолчанию

Короче я не знаю как его вообще использовать в задании )
POPOV вне форума Ответить с цитированием
Старый 03.12.2007, 23:57   #6
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Сообщение от POPOV Посмотреть сообщение
Короче я не знаю как его вообще использовать в задании )
Еще короче - это я не понимаю - неужели трудно открыть хэлп по любому датасету и посмотреть пример использования LOCATE ?
mihali4 вне форума Ответить с цитированием
Старый 04.12.2007, 10:33   #7
POPOV
Форумчанин
 
Аватар для POPOV
 
Регистрация: 26.10.2007
Сообщений: 124
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
Это стандартный метод датасета.
Датасет это объект SQLDataSet ?
POPOV вне форума Ответить с цитированием
Старый 04.12.2007, 12:11   #8
dron-s
Форумчанин
 
Регистрация: 04.03.2007
Сообщений: 615
По умолчанию

метод Locate
Цитата:
Searches the dataset for a specified record and makes that record the current record.

Delphi syntax:

function Locate(const KeyFields: String; const KeyValues: Variant; Options: TLocateOptions): Boolean;

C++ syntax:

virtual bool __fastcall Locate(const AnsiString KeyFields, const System::Variant &KeyValues, Db::TLocateOptions Options);

Description

Call Locate to search a dataset for a specific record and position the cursor on it.

KeyFields is a string containing a semicolon-delimited list of field names on which to search.

KeyValues is a variant array containing the values to match in the key fields. If KeyFields lists a single field, KeyValues specifies the value for that field on the desired record. To specify multiple search values, pass a variant array as KeyValues, or construct a variant array on the fly using the VarArrayOf routine
dron-s вне форума Ответить с цитированием
Старый 04.12.2007, 15:08   #9
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Сообщение от POPOV Посмотреть сообщение
Датасет это объект SQLDataSet ?
Еще немного побольше внимательности, и вы сделаете для себя открытие, что датасет - это и TTable, и TQuery, и, если совсем просто, любой компонент, который используется для указания в свойстве DataSet компонента TDataSource...
Кстати, сия тайна очень прозрачно раскрыта в штатном хэлпе...
mihali4 вне форума Ответить с цитированием
Старый 04.12.2007, 18:21   #10
POPOV
Форумчанин
 
Аватар для POPOV
 
Регистрация: 26.10.2007
Сообщений: 124
По умолчанию

Ладно, разберёмси..
POPOV вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск по базе данных ERASERROR БД в Delphi 4 14.03.2008 16:34
Форма для поиска по базе данных Vitec PHP 6 08.10.2007 20:15
jpg в базе данных средствами ADO SSSergey БД в Delphi 5 11.06.2007 12:17