Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 2
Регистрация: 01.10.2013
Сообщений: 342
1

Сравнить две записи в программе

12.05.2016, 19:40. Показов 864. Ответов 25
Метки нет (Все метки)

Есть вот такой незамысловатый код:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
procedure TForm4.Button1Click(Sender: TObject);
var s1:string;
    n:integer;
begin
    s1:=DBEdit4.text;
    Query1.Close;
    Query1.SQL.Clear;
    Query1.SQL.Add('SELECT * FROM KURIER K WHERE K.PASPORT = "'+s1+'" ');
    Query1.Open;
    n:=Query1.RecordCount;
 
    if n=0 then begin
       Form1.Table3_kurieri.Edit;
       Form1.Table3_kurieri.Post;
       Close;
       MessageDlg('Сдал', mtError, [mbOK], 0);
    end else MessageDlg('Такой курьер уже есть в базе!', mtError, [mbOK], 0);
 
end;
Суть его в том, что он стоит на кнопке редактирования данных, проще говоря сравнение на повторение данных в базе, напрмер, если есть уже человек с фамилией: Иванов, то его не должно добавить.
Однако, столкнулся с проблемой, при добавлении новой строки проблем нет, но если открыть редактирование то значение из базы всегда равно 1, так как запись же есть уже, поэтому у меня всегда пишет, что такая фамилия есть, каким образом можно обработать этот нюанс, а именно, например, если я просто нажал редактирование, но не редактировал поля или они остались теми же то просто оставить запить такой же как и есть, не выдавая ошибку?
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.05.2016, 19:40
Ответы с готовыми решениями:

Как сравнить две даты?
А ніхто не догадався просто порівняти ці дати? A, B : TDateTime; if A>=B then .... else...

Как сравнить две таблицы dbe на предмет одинаковых записей по определенным полям
Подскажите как сравнить две таблицы dbe на предмет одинаковых записей по определенным полям. ...

Связать две формы по записи из DBGrid
Здравствуйте! Такой вопрос, есть БД в access, она подключена к Delphi. В Delphi имеются 2 формы,...

Поменять две записи местами в Paradox
База данных Paradox. Имеются различные поля типа string, smallint. Также графическое поле и...

25
3949 / 3364 / 875
Регистрация: 29.08.2013
Сообщений: 21,979
Записей в блоге: 2
12.05.2016, 20:12 2
если начали писать запросы, то зачем делать Edit\Post?
почему не сделать нормальный Insert?

тогда вы легко обработаете любую ситуацию
0
0 / 0 / 2
Регистрация: 01.10.2013
Сообщений: 342
12.05.2016, 22:34  [ТС] 3
Потому что это делфи, где нам не дают таких знаний, прошу сделать так как требуют.
0
3949 / 3364 / 875
Регистрация: 29.08.2013
Сообщений: 21,979
Записей в блоге: 2
12.05.2016, 22:44 4
ничего не понял

напишите нормальные SQL запросы и проблема ваша исчезнет
0
2747 / 1557 / 522
Регистрация: 29.05.2013
Сообщений: 6,765
13.05.2016, 00:12 5
напрмер, если есть уже человек с фамилией: Иванов, то его не должно добавить
И с чего это интересно вы решили, что у вас не может быть 2 Иванова с разными паспортами? Если вы живете где-то в Руанде, может Иванов и редкая фамилия, но для России как-бы нормально.
0
5083 / 3963 / 1309
Регистрация: 14.04.2014
Сообщений: 18,240
Записей в блоге: 18
13.05.2016, 06:34 6
Цитата Сообщение от demon31 Посмотреть сообщение
Form1.Table3_kurieri.Edit;
* * * *Form1.Table3_kurieri.Post;
это вообще что?
в переводе на русский
ща поредактирую запись
а, нет, ну нафиг
0
16 / 15 / 4
Регистрация: 30.10.2014
Сообщений: 175
13.05.2016, 10:48 7
krapotkin, Я не увирен, но иногда таким способом пользуются что бы записи сохранились в парадокс7, так как просто post записи не всегда сохраняет, или там вообще ошибка выходила, потому что таблица не в режиме редактирования.
0
5083 / 3963 / 1309
Регистрация: 14.04.2014
Сообщений: 18,240
Записей в блоге: 18
13.05.2016, 11:21 8
edit - начать редактирование
post - записать изменения
первая выдаст ошибку, если уже в редактировании, вторая - наоборот

если лень проверять самому, можно использовать CheckBrowseMode;
0
0 / 0 / 2
Регистрация: 01.10.2013
Сообщений: 342
13.05.2016, 15:39  [ТС] 9
Вы цепляетесь не к тому, суть в моём вопросе,а не в том могут быть 2 ивановых или нет, ибо будет больше проверок, на ФИО + паспорт например, и да, это открытие редактирования и пост сразу потому что ошибка, которая говорит что таблица не открыта для редактирования.
0
3949 / 3364 / 875
Регистрация: 29.08.2013
Сообщений: 21,979
Записей в блоге: 2
13.05.2016, 16:06 10
у тебя проблема в том что ты неправильно делаешь редактирвоание
0
0 / 0 / 2
Регистрация: 01.10.2013
Сообщений: 342
13.05.2016, 16:51  [ТС] 11
Почему?

Добавлено через 17 секунд
Да и мне не нужно редактирование, мне нужно сравнение -.-
0
3949 / 3364 / 875
Регистрация: 29.08.2013
Сообщений: 21,979
Записей в блоге: 2
13.05.2016, 16:59 12
Цитата Сообщение от demon31 Посмотреть сообщение
Почему?
Цитата Сообщение от demon31 Посмотреть сообщение
но если открыть редактирование то значение из базы всегда равно 1
Цитата Сообщение от demon31 Посмотреть сообщение
Да и мне не нужно редактирование, мне нужно сравнение
сравнение чего с чем?
0
0 / 0 / 2
Регистрация: 01.10.2013
Сообщений: 342
13.05.2016, 17:03  [ТС] 13
В базе, в таблице есть К записей, а я выбираю любую и жму редактировать, срабатывает мой код
Delphi
1
2
3
4
5
6
    s1:=DBEdit4.text;
    Query1.Close;
    Query1.SQL.Clear;
    Query1.SQL.Add('SELECT * FROM KURIER K WHERE K.PASPORT = "'+s1+'" ');
    Query1.Open;
    n:=Query1.RecordCount;
На этой форме поля для редактирования, одно из них допустим "фамилия" оно равняется DBEdit4.text;
Мне сразу же n=1 вернуло, он нашел запись в базе, я жму добавить, ничего не меняя, и он пишет что такая запись существует. А не должно быть так, ведь это та же самая запись что и была, а не новая.
0
5083 / 3963 / 1309
Регистрация: 14.04.2014
Сообщений: 18,240
Записей в блоге: 18
13.05.2016, 17:04 14
Цитата Сообщение от demon31 Посмотреть сообщение
суть в моём вопросе
нет вопроса
есть неверный код, который очевидно вам не подходит
для того, чтобы написать другой, нужны разделы что дано, что требуется получить

тут с первой строки все не так...
Цитата Сообщение от demon31 Посмотреть сообщение
s1:=DBEdit4.text;
0
3949 / 3364 / 875
Регистрация: 29.08.2013
Сообщений: 21,979
Записей в блоге: 2
13.05.2016, 17:07 15
Цитата Сообщение от demon31 Посмотреть сообщение
А не должно быть так, ведь это та же самая запись что и была, а не новая.
так ведь у тебя в коде написано что добавить только если n=0
а у тебя n=1

конечно ОН тебе ничего не добавить
0
0 / 0 / 2
Регистрация: 01.10.2013
Сообщений: 342
13.05.2016, 17:09  [ТС] 16
Да вам даже просто говоришь, а вы не сечёте, хотя мой уровень 1 из 10 ...

Добавлено через 51 секунду
Так это и требуется исправить, он должен добавить, даже если n=1, так как оно блин и равняется одному, у вас проблемы с логикой или скринов запилить что поняли?

Добавлено через 1 минуту
Мой код работает правильно если добавляют новую запись, но если редактируют старую он возвращает 1 и не добавляет, расценивая её как повтор.
0
3949 / 3364 / 875
Регистрация: 29.08.2013
Сообщений: 21,979
Записей в блоге: 2
13.05.2016, 17:14 17
Цитата Сообщение от demon31 Посмотреть сообщение
Так это и требуется исправить
что тут исправлять то?
это проблемы не с кодом, а с логикой программы
логику ты придумываешь исходя из ТЗ (или что там у тебя)

придумай как сделать так что бы все работало и только потом пиши код
0
5083 / 3963 / 1309
Регистрация: 14.04.2014
Сообщений: 18,240
Записей в блоге: 18
13.05.2016, 17:14 18
чтобы поняли, надо научиться описывать задачу связным текстом на русском языке
никто не собирается отгадывать что такое N и почему при значении 0 - так, а 1 - этак
что у вас есть?
что нужно сделать?
и тогда "пилить скрины" не требуется

нужен не код, а алгоритм
вот именно его вы и не можете никак описать
Цитата Сообщение от demon31 Посмотреть сообщение
если я просто нажал редактирование, но не редактировал поля
Цитата Сообщение от demon31 Посмотреть сообщение
если открыть редактирование
вот реально пустой звук
0
0 / 0 / 2
Регистрация: 01.10.2013
Сообщений: 342
13.05.2016, 17:26  [ТС] 19
Если вы не знаете что делает Query1.RecordCount то всё плохо, как мне объяснить что это количество строк с такой фамилией, которая записана в DBEdit4.text?

Добавлено через 32 секунды
Это сложно, я не знаю как более еще описать ...

Добавлено через 6 минут
Есть таблица к ней прилагается три кнопки:
1) Добавить строку
2) Редактировать строку
3) Удалить строку

Я жму добавить, открывается форма добавления (она же является и формой редактирования, только щас она пустая), заполняю поля, и жму добавить, срабатывает проверка, если строк с фамилией что я внёс не существует, то n вернёт значение 0 и запись добавится, иначе запись есть и выдаст ошибку.

Я жму редактировать на ту запись которую я добавил только что, в ней уже отобразятся мои поля которые я забил, я ничего в них не поменяю и нажму добавить, срабатывает проверка, которая находит мою фамилию в базе и n вернёт значение 1 и запись не добавит, а выдаст ошибку, а её должно было добавить.
0
3949 / 3364 / 875
Регистрация: 29.08.2013
Сообщений: 21,979
Записей в блоге: 2
13.05.2016, 17:42 20
тогда напиши 2 куска кода в зависимости от того что ты делаешь

нажал кнопку добавить - открылась форма добавление (в заголовке у нее добавить)
нажал кнопку редактировать - открылась форма редактирование (в заголовке у нее редактировать)

тогда в зависимости от заголовка
if Form.Caption='добавить' then
INSERT

if Form.Caption='редактировать' then
UPDATE

и никогда не пиши
Цитата Сообщение от demon31 Посмотреть сообщение
запись не добавит, а выдаст ошибку, а её должно было
программу ТЫ пишешь, а не делфи
следовательно ТЫ должен ее исправлять
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.05.2016, 17:42

Добавление записи в программе
В общем, ребята проблема....:wall: Препод дал баговою программу, сказал исправить, либо попрут с...

Почему программный код повторяет две последние записи?
Var ExcelApp,Sheet,Colum:Variant; index,i:Integer; begin ExcelApp:=...

Добавление записи в таблицу Бд в программе Delphi
На сервере есть хранимая процедура ALTER PROCEDURE . ( @Name varchar(30), -- Наименование...

сравнить две таблицы
Есть две таблицы Иванов Иван Иванович 89606785533 Петров Петр Петрович...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru