Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 16.11.2014
Сообщений: 31

Сравнить содержимое столбца Adotable c содержимым dbedit

25.07.2016, 19:09. Показов 1731. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите как можно сравнить содержимое столбца adotable с содержимым dbedit, если такая запись уже есть вывести сообщение, а если нет то просто занести данные в базу. Делаю так
Delphi
1
2
3
4
5
6
7
8
9
10
11
 if form9.ADOTable1Табельный_ .AsInteger = strToint
      (DBEdit2.Text) then
    begin
      DBEdit2.Clear;
      ShowMessage('Такой табельный уже есть!!!');
    end
    else
    begin
      form9.ADOTable1.post;
      Close;
    end;
Но почему-то какой бы я табельный не вводил в dbedit все время говорит, что уже есть такой табельный.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.07.2016, 19:09
Ответы с готовыми решениями:

Сравнить содержимое первого файла с содержимым файлов, которые хранятся в каталогах
1. есть какой-то файл 1.txt, в каждой строке которого хранятся имена, например: s1, s2, s3, s4, s5. 2. есть каталоги (например: k1, k2,...

Сравнить переменную типа string с содержимым файла
а как можно сравнить переменную типа string с содержимым файла?

Как сравнить логин и пароль с содержимым текстового файла
При входе в личный кабинет: require_once('data.php'); $err = ''; if (isset($_POST) && isset($_POST)) { $_POST = md5($_POST); ...

18
0 / 0 / 0
Регистрация: 16.11.2014
Сообщений: 31
25.07.2016, 19:26  [ТС]
Делал через adoqery
Delphi
1
2
3
4
5
6
7
8
9
10
11
if form9.ADOQuery1.FieldByName('Табельный_№').asinteger = strToint
      (DBEdit2.Text) then
    begin
      DBEdit2.Clear;
      ShowMessage('Такой табельный уже есть!!!');
    end
    else
    begin
      form9.ADOTable1.post;
      Close;
    end;
Вроде не повторяющуюся запись нормально добавляет, но если запись такая есть в базе, то показывает рисунок во вложении.
Как можно сделать так чтобы выводилось сообщение "Такой табельный уже есть!!!" и заново необходимо было ввести в dbedit табельный.
Миниатюры
Сравнить содержимое столбца Adotable c содержимым dbedit  
0
 Аватар для krapotkin
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,671
Записей в блоге: 21
25.07.2016, 19:54
уж сколько раз твердили миру, да, видно, все не впрок...

DB-компоненты осуществляют интерфейс между пользователем и данными, которые находятся в датасете
причем в автоматическом режиме
если вы хотите работать с данными, работайте с данными! оставьте экран в покое!

датасет предоставляет события OnBeforePost OnValidate и кучу всего для проверки и любых других действий
и в документации тоже это написано
0
0 / 0 / 0
Регистрация: 16.11.2014
Сообщений: 31
25.07.2016, 20:17  [ТС]
Я только начинаю изучать. Делаю как объясняли преподаватели.
0
0 / 0 / 0
Регистрация: 16.11.2014
Сообщений: 31
27.07.2016, 04:41  [ТС]
Ну что никто не подскажет?((
0
 Аватар для krapotkin
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,671
Записей в блоге: 21
27.07.2016, 06:36
в общем виде все уже подсказано. в конкретном никто не знает ваших таблиц кроме вас
нужно делать отдельный запрос перед вставкой в базу на поиск вашего табельного
например в OnBeforePost
данные при этом брать не в DB-компонентах, а в датасете.
q:TADOQuery где то на форме
Delphi
1
2
3
4
5
6
7
8
9
10
var s:string;
 c:integer;
...
s:=ADOQuery1.FieldByName('поле').AsString;
q.sql.text:='select count(поле) as C from таблица where поле='+s;
q.open;
c:=q.FieldByName('C').AsInteger;
q.close;
if c > 0  then 
  raise Exception.Create('Такой табельный уже есть');
Добавлено через 2 минуты
можно также обернуть ваш Post в try ... except
Delphi
1
2
3
4
5
6
try
  ...
  ..Post;
except
  showMessage('Не удалось вставить, возможно дублируется Т.Н.');
end;
тогда пользователь не увидит то страшное сообщение, а увидит ваше нестрашное
0
0 / 0 / 0
Регистрация: 16.11.2014
Сообщений: 31
27.07.2016, 18:49  [ТС]
Все сделал серавно не получается(
0
 Аватар для krapotkin
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,671
Записей в блоге: 21
27.07.2016, 22:07
на слово тут давно не верят
0
Эксперт Pascal/Delphi
 Аватар для xxbesoxx
1135 / 616 / 129
Регистрация: 13.02.2009
Сообщений: 3,602
28.07.2016, 00:27
Цитата Сообщение от DarkVoin Посмотреть сообщение
Я только начинаю изучать. Делаю как объясняли преподаватели.
и Вы скажете вашего преподавателу что такой проверка не делаетсия из клиентские приложения.! это надо делать на уровне СУБД

Добавлено через 8 минут
Цитата Сообщение от krapotkin Посмотреть сообщение
нужно делать отдельный запрос перед вставкой в базу на поиск вашего табельного
например в OnBeforePost
Если программа многопользовательски ! между SELECT-ом и INSERT-ов какой то "Васия" успееть еше INSERT-ит тот данных который уже есть в таблице.! и за этого бессмысленно делить такой проверка из "клиентское приложение"
0
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,612
28.07.2016, 01:55
Цитата Сообщение от DarkVoin Посмотреть сообщение
Все сделал серавно не получается(
Цитата Сообщение от krapotkin Посмотреть сообщение
на слово тут давно не верят
Код "все сделал" в студию!
0
0 / 0 / 0
Регистрация: 16.11.2014
Сообщений: 31
28.07.2016, 04:29  [ТС]
Программа однопользовательская.
вот весь код нажатия на кнопку.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
procedure TForm10.RzBitBtn1Click(Sender: TObject);
var
  s: string;
  c: integer;
begin
  if tag = 0 then
  begin
    if DBEdit2.Text = '' then
    begin
      ShowMessage('Введите табельный №!!!');
    end
    else if DBEdit3.Text = '' then
    begin
      ShowMessage('Введите ФИО сотрудника!!!');
    end
    else if DBLookupComboBox1.KeyValue = NULL then
    begin
      ShowMessage('Выберите должность сотрудника!!!');
    end
    else if DBLookupComboBox2.KeyValue = NULL then
    begin
      ShowMessage('Выберите персонал сотрудника!!!');
    end;
 
    s := Form9.ADOTable1.FieldByName('Табельный_№').AsString;
    Form9.ADOQuery1.sql.Text :=
      'select count(Табельный_№) as C from Сотрудники where Табельный_№=' + s;
    Form9.ADOQuery1.open;
    c := Form9.ADOQuery1.FieldByName('C').AsInteger;
    Form9.ADOQuery1.close;
    if c > 0 then
    begin
      ShowMessage('Такой табельный уже есть');
    end
    else
    begin
      Form9.ADOTable1.post;
      close;
    end;
  end
  else
  begin
    if DBEdit2.Text = '' then
    begin
      ShowMessage('Введите табельный №!!!');
    end
    else if DBEdit3.Text = '' then
    begin
      ShowMessage('Введите ФИО сотрудника!!!');
    end
    else if DBLookupComboBox1.KeyValue = NULL then
    begin
      ShowMessage('Выберите должность сотрудника!!!');
    end
    else if DBLookupComboBox2.KeyValue = NULL then
    begin
      ShowMessage('Выберите персонал сотрудника!!!');
    end
    else
    begin
      Form9.ADOTable1.post;
      close;
    end;
  end;
end;
Вроде сейчас с дубликатами нормально если такой табельный есть выводит сообщение, если нету сохраняет в базу. Но возникла другая проблема если я не введу какие нить данные и нажму на кнопку выскакивает сообщение что необходимо ввести данные, но серавно заносит в базу с пустыми ячейками.
0
0 / 0 / 0
Регистрация: 16.11.2014
Сообщений: 31
28.07.2016, 04:33  [ТС]
А если не введу табельный № выскакивает сообщение, что необходимо ввести табельный № и потом программа закрывается и пишет сообщение.
Миниатюры
Сравнить содержимое столбца Adotable c содержимым dbedit  
0
 Аватар для krapotkin
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,671
Записей в блоге: 21
28.07.2016, 07:47
xxbesoxx, я это знаю и писал 100 раз, но 100 раз убеждался, что преподаватели не в курсе))))

Цитата Сообщение от DarkVoin Посмотреть сообщение
серавно
ыпосмотрите удаидёт программа после строки 10. Очевидно, что на строку 25
Если нужно выйти из процедуры, пишут Exit
0
Эксперт Pascal/Delphi
 Аватар для xxbesoxx
1135 / 616 / 129
Регистрация: 13.02.2009
Сообщений: 3,602
28.07.2016, 10:21
Цитата Сообщение от krapotkin Посмотреть сообщение
но 100 раз убеждался, что преподаватели не в курсе))))
Ну да.! преподаватели большими буквами ! который дают таких задачу ! Я просто промолчу
0
28.07.2016, 11:35

Не по теме:

еще хуже, на прошлой неделе отговаривал девочку читать учебник, с которого она код приводила здесь, так как там вообще бред был написан...

0
28.07.2016, 12:48

Не по теме:

Цитата Сообщение от krapotkin Посмотреть сообщение
так как там вообще бред был написан...
Да, неудивительно .! потому что нормальный люди который хорошо знает своего дела, они очень редко начинают "преподавателем работать"

0
0 / 0 / 0
Регистрация: 16.11.2014
Сообщений: 31
28.07.2016, 16:55  [ТС]
С этой проверкой все получилось, но есть еще одна где необходимо сравнить слова. Делаю все точно также как и с первой, но выскакивает сообщение. Подскажите что необходимо изменить.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
procedure TForm14.RzBitBtn1Click(Sender: TObject);
var
  s: string;
  c: integer;
begin
  if tag = 0 then
  begin
    if DBEdit1.Text = '' then
    begin
      ShowMessage('Введите категорию!!!');
      exit;
    end
    else if DBEdit2.Text = '' then
    begin
      ShowMessage('Введите срок службы!!!');
      exit;
    end
    else s := Form13.ADOTable1.FieldByName('Группа').AsString;
    Form13.ADOQuery1.sql.Text :=
      'select count(Группа) as C from Группа where Группа=' + s;
    Form13.ADOQuery1.open;
    c := Form13.ADOQuery1.FieldByName('C').AsInteger;
    Form13.ADOQuery1.close;
    if c > 0 then
    begin
      DBEdit1.Clear;
      ShowMessage('Такая группа уже есть!!!');
      exit;
    end
    else
    begin
      form13.ADOTable1.post;
      Close;
    end;
  end
  else
  begin
    if DBEdit1.Text = '' then
    begin
      ShowMessage('Введите категорию!!!');
      exit;
    end
    else if DBEdit2.Text = '' then
    begin
      ShowMessage('Введите срок службы!!!');
      exit;
    end
    else
    begin
      form13.ADOTable1.post;
      Close;
    end;
  end;
end;
Миниатюры
Сравнить содержимое столбца Adotable c содержимым dbedit  
0
 Аватар для krapotkin
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,671
Записей в блоге: 21
28.07.2016, 19:34
Лучший ответ Сообщение было отмечено DarkVoin как решение

Решение

Delphi
1
'...Группа=' + AnsiQuotedStr( s, '''');
1
0 / 0 / 0
Регистрация: 16.11.2014
Сообщений: 31
28.07.2016, 21:57  [ТС]
Спасибо большое. Все работает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.07.2016, 21:57
Помогаю со студенческими работами здесь

Удалить содержимое папки кроме одной подпапки с ее содержимым
Думаю из заголовка понятно. Есть папка data, в ней куча файлов и папок, но надо удалить все, кроме data/media

Сравнить числа массива РПД из 10-ти элементов, с содержимым R5, посчитать количество совпадений
Сравнить числа массива РПД из 10-ти элементов, с содержимым R5, посчитать количество совпадений.

Как содержимое одного текстового файла дописать содержимым другого?
Вечер добрый. Напишите пожалуйста как из одно текстового файла все строки дописать во второй текстовый файл. За ранее благодарен.

Как в adotable программно удалить содержимое выделенной строки?
как в adotable программно удалить содержимое выделенной строки в поле АДРЕС и ТЕЛЕФОН???

Сравнить 2 столбца, и для ячеек с совпадениями в столбце А перейти на 2 столбца вправо и вставить значение
Добрый день! Помогите пожалуйста решить одну проблему. Нужно сравнить 2 столбца, и для ячеек с совпадениями в столбце А перейти на 2...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru