|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
02.11.2015, 09:39 | #1 |
Пользователь
Регистрация: 02.11.2015
Сообщений: 12
|
DELPHI-SQL. Запись в БД на основе данных в строке
Здравствуйте, уважаемые форумчане.
Прошу помощи в решении проблемы. Напишу сразу подробно, чтобы дать общую картину. Пишу программу для учета пользователей на определенной железке. База находится на сервере, mssql. Использую ADOConnection, ADOQuery. Программа обменивается инфой с железкой по ssh. В базе 2 таблицы, в них такие поля: 1 (main_table): LOGIN, FIO, PASSPORT - varchar 2 (log_table): LOGIN, DATE_IN, DATE_OUT - varchar, datetime В main_table из программы заносится юзер, ему присваивается логин и пароль, и отправляется в железку. Когда юзер авторизуется на железке со своим логином и паролем, в log_table записывается LOGIN и DATE_IN, то есть имя пользователя и дата входа. Пока делал без проверок таким кодом: Код:
parsed_login, parsed_date - значения в эти переменные берутся из парсера строки, которую посылает железка. Есть еще parsed_logout - имя пользователя, который разлогинился на железке. parsed_login и parsed_logout имеют одинаковые значения, но на основе парсинга относятся ко входу или выходу. То есть парсер выбирает это значение, если в строке из железки присутствует строка ":logged in", то имя пользователя записывается в parsed_login, а если там есть ":logged out", то соответственно оно записывается в parsed_logout. Загвоздка у меня в следующем: Перед записью в таблицу нужно проверить, есть ли в поле DATE_OUT к этому LOGIN записанное значение. Если значение пустое, то в DATE_OUT добавляется дата/время выхода. Не могу понять как сделать проверку: Если у этого пользователя нет в таблице значения DATE_IN то ADOQuery1.SQL.Add('INSERT INTO log_table([LOGIN], [DATE_IN]) '+ 'values ('''+parsed_login+''','''+parsed_da te+''');') а если DATE_IN есть, а DATE_OUT пусто - то добавить в существующую строку в поле DATE_OUT значение из parsed_date. Вроде ничего не упустил. Прошу помощи с запросом, со сложными запросами еще не сталкивался. Заранее всем большое спасибо) |
02.11.2015, 10:16 | #2 |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,528
|
правильнее будет переделать таблицу log_table
LOGIN id пользователя выполнившего операцию(действие)_user DATE_LOG время выполнения операции LOG_STATE идентификатор выполненной операции ('IN' | 'OUT' ) в этом случае ВСЕ записи будут идти через простой insert. Код:
а узнать КТО сейчас залогинен и другую интересующую инфу можно через ЛЮБОЙ достаточно сложный select. Для формирования СТАНДАРТНЫХ (для пользователя) отображений (сокрытия сложности и сокращения конечного кода) при необходимости используются(пишутся) VIEW. Код:
Код:
Код:
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 02.11.2015 в 10:33. |
02.11.2015, 10:54 | #3 |
Пользователь
Регистрация: 02.11.2015
Сообщений: 12
|
evg_m, Спасибо большое за ответ, сейчас буду пробовать. И сам уже начал приходить к мысли, что неправильно сделал таблицы в начале.
|
02.11.2015, 11:05 | #4 |
Пользователь
Регистрация: 02.11.2015
Сообщений: 12
|
а какой тип данных ставить для LOG_STATE? И где прописать принимаемые значения IN/OUT ?
ПС Все понял, тупанул)) Последний раз редактировалось dima1208; 02.11.2015 в 11:11. |
05.11.2015, 13:52 | #5 |
Пользователь
Регистрация: 02.11.2015
Сообщений: 12
|
[QUOTE=evg_m;1548369]
Код:
В таблицу нужно еще дополнительные колонки вставлять? Мне нужно получить по определенному пользователю все записи со временем его входов и выходов, вида: | LOGIN_ID | LOG_IN | LOG_OUT | ------------------------------------------------------------ | user1 | 12.12.12 08:00:00 | 12.12.12 08:11:00 | ------------------------------------------------------------ | user1 | 12.12.12 08:22:00 | 12.12.12 08:33:00 | и так далее. Получается выборку можно делать только по таблице log_table и не использовать JOIN? Нужно условие в запросе прописывать? |
05.11.2015, 14:50 | #6 | |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,528
|
Цитата:
Код:
Код:
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 05.11.2015 в 15:00. |
|
21.03.2016, 06:36 | #7 |
Пользователь
Регистрация: 02.11.2015
Сообщений: 12
|
Евгений, огромное спасибо! Вы очень помогли. Все получилось.
|
29.03.2016, 13:55 | #8 |
Пользователь
Регистрация: 02.11.2015
Сообщений: 12
|
Евгений, здравствуйте.
Помогите, пожалуйста, еще раз, снова в ступоре... Я сделал такой запрос: Код:
Сверху отдельно login_id и ФИО (выделенная строка из DBGrid1), а дальше таблица ___________________________________ | login.date_log | logout.date_log | mac | ---------------------------------------------- Теперь надо сделать, чтобы отображать всех юзеров, и к таблице справа прибавить две колонки: ___________________________________ ________________________________ | login.date_log | logout.date_log | mac | login_id | FAMILY+NAME+SURNAME | ----------------------------------------------------------------------------------------- ФИО хранятся во второй таблице main_table. Как переделать запрос? Никак я не могу понять эти JOINы. Если в конец добавляю JOIN - ругается на синтаксис возле JOIN. Код:
|
29.03.2016, 14:08 | #9 | |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,528
|
Цитата:
Код:
программа — запись алгоритма на языке понятном транслятору
|
|
30.03.2016, 07:20 | #10 |
Пользователь
Регистрация: 02.11.2015
Сообщений: 12
|
Код:
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Программа записи DVD на основе данных MS SQL (15 000) | acetgi | Фриланс | 4 | 20.12.2013 09:43 |
не работает поиск по бд Access на основе sql приложение написано в delphi | Elizaveta007 | БД в Delphi | 4 | 19.08.2013 10:10 |
Организация одноноправленного списка на основе рекурсивных типов данных в виде стека [Delphi] | Kristina93 | Помощь студентам | 0 | 31.12.2012 21:41 |
Задачи: Сортировка символьной информации в строке, заданной пользователем.; Чтение и запись данных в файл (Assembler,TASM) | User22 | Помощь студентам | 2 | 01.12.2011 11:40 |
SQL запрос на основе другого SQL запрса... | Timoxa | БД в Delphi | 1 | 07.01.2007 18:15 |