kodecs wrote:

Попробовал, отображается только первая строка, где нет WHERE на связь...
Думаю заквоздка в том, что у меня связь многое ко многим через KomputerUsers и MonitorUsers, надо ковырять

Самое интересное что если я пытаюсь перенаправить запрос на

FROM Monitor WHERE MonitorUsers.id_Sotrudniki = {TabSotrudniki}


мне возвращается ошибка вида "Нет такого столбца KomputerUsers.id_Sotrudniki", хотя в таблице KomputerUsers есть связь Sotrudniki.. То же самое с мониторами sad
Уже и сам понимаю что перегибаю палку с обилием вопросов, но "пробел" в осознании того как конкретно работают связи в проге и связи "многое ко многим" взрывает мой мозг ) приходится все делать методом тыка smile

Попробовал, отображается только первая строка, где нет WHERE на связь...
Думаю заквоздка в том, что у меня связь многое ко многим через KomputerUsers и MonitorUsers, надо ковырять

Сможете подсказать?)

Больше половины вопроса отпала сама собой (методом научного тыка)

SELECT Familia, Ymia, Otchestvo, login, TypeComp,ProizvodCMP, ModelCMP,
YmiaVSeti,KompIPAdress, KompInventar№,KompServisniy№, KompSeriyniy№,
TypeMonitor, MonitorInventar№,MonitorServisniy№, MonitorSeriyniy№

FROM Sotrudniki, Komputers, Monitor, CompProizvod, CompModel

возвращает строку вида:

Иванов    Илья    Владимирович    ivanov-iv    Компьютер    HP    BEST-3000    Ivanov-PC    127.0.0.1    10000000009    30000000009    20000000009    Монитор    10000000008    20000000008    30000000008

Теперь бы только узнать как добавить туда оператор WHERE со ссылкой на выбранную строку в таблице TabSotrudniki (не знаю синтаксис связи программного интерфейса и SQL запросов) Что бы выборка была по конкретному человеку, а не по всему массиву

И вопрос в догонку, скриптом можно написать такую команду, что бы результат запроса выводился на другую форму и / или в эксель?

по пункту2. Правильно ли я понимаю что: SQL запрос при помощи UNION получится выполнить только в виде таблицы в несколько строк (строка = таблица)
Например:

SELECT Familia as "Tip", Ymia as "inventarnii", Otchestvo as "seriinii", login as "servisniy"                                              
FROM Sotrudniki
UNION
SELECT TypeComp, Inventar№, Servisniy№, Seriyniy№                
FROM Komputers
UNION
SELECT TypeMonitor, Inventar№, Servisniy№, Seriyniy№
FROM Monitor

Вернет три строки, одна из таблицы Sotrudniki, одна из Komputeri, третья из Monitor.. Причем, получается я даже не могу настроить в каком порядке отображать эти строки?
Тут вопрос, как же все таки сделать параметр Where (Его ли?), что бы запрос делался для выбранного в главной таблице сотрудника, а не вываливал мне весь массив данных имеющихся в этих всех таблиц?
Пока что так получается:

Компьютер    1040000001    3000000001    2000000001
Компьютер    1040000002    3000000002    2000000002
Иванов    Илья    Владимирович    ivanov-iv
Монитор    1000000009    2000000009    3000000009
Монитор    1111111111    2222222222    3333333333
Сидоров    Вячеслав    Владимирович    sidorov-vv

Проще говоря как осуществляется взаимодействие SQL кода и интерфейса форм программы? (Если вдруг я спрашиваю то что неоднократно обсуждалось - простите, отправляйте искать внимательнее smile )
В идеале, конечно, придумать или скрипт или запрос такой, что бы хоть в одну строку вернулось значение ФИО Монитор Компьютер..
Или так:
Фио (всегда вверху) (выбран в исходной таблице и по нему идет выборка закрепленных за ним ТМЦ)
Компьютер
Компьютер 2
Монитор
Монитор 2

Пока что, понятно, такой запрос ничего не дает, только вываливает массив всех имеющихся сотрудников вперемешку с компами и мониторами smile

Уважаемый DriveSoft, помогите, пожалуйста!! smile
Слишком много я сделал, что бы не быть уверенным в результате! smile
Я отправляю вам PROJECT0_5 на почту, посмотрите пожалуйста!

В общем есть те же знакомые таблички: Сотрудники - Компьютеры - Мониторы (В будущем будет добавлена еще офисная техника и телефоны, и т.д.) Все это может быть привязано в любых пропорциях к сотруднику

Сделал все, как мне кажется, как в примере Books and Authors, настроил привязку мониторов ( через MonitorsUsers) и компьютеров ( через KomputerUsers) к сотрудникам. И вроде бы, просмотр человека к которому привязан комп (обратный процесс) тоже получалось, за это спасибо вам за советы! smile

Но заметил такие глюки / или мои недоработки:
1. Если добавить сотрудника, прикрепить ему комп и/или монитор и начать добавлять сразу нового сотрудника - все хорошо работает. Но если сначала открыть окно редактирования сотрудника, затем закрыть, а потом добавлять нового - грид в форме добавления НОВОГО сотрудника уже содержит строку с компьютером и монитором сотрудника, которого редактировали до этого sad
СИМПТОМЫ:
Причем эта надпись - "призрак". Если, не обращая на нее внимания, закрепить комп и монитор за сотрудником, при просмотре его записи будет отображаться только одна строка, которую добавили..
Если попытаться удалить запись "призрака" при добавлении нового сотрудника, комп удалится из "профиля" сотрудника которого редактировали до этого.. Как-то так.. Надеюсь объяснил понятно, думаю если вы попробуете это сделать в моей форме - все поймете

2. Поскольку я точно и досканально не понимаю как работает связь многое-ко-многим, сложно придумать как сделать сводный грид для отображения всей всей информации из 5 таблиц?
Например ФИО, комп, монитор, телефон, офисная техника, если для хранения каждого вида информации используется отдельная таблица связей Komputer users, Monitor users и т.п.?

3. ну и на будущее, если у человека не один монитор, как это отобразить в гриде? либо доп столбиками либо.. ?

Прошу прощения за такие нелепые запросы и заранее спасибо за посильную помощь smile

Вроде процесс пошел, спасибо большое smile
Попробую теперь поразбираться в этих связях, что бы сделать все удобно, потому что их будет бесчисленное множество smile)

DriveSoft wrote:

Вам нужна связь многие ко многим?
когда компьютер может иметь несколько пользователей, а пользователь может иметь несколько компьютеров?

Можно и так (Думаю случаи будут наблюдаться когда у сотрудника два компа и более), но чаще один к одному, т.е. у пользователя один компьютер, один монитор, один телефон и т.д. и что бы в двухстороннем порядке я мог сделать отчет и что закреплено за пользователем и какой пользователь сидит за этим оборудованием

Подкрутил немного проект, сделал дефолтные поля для записи, спасибо, от скриптов сохранения избавились.
У меня нарисовался еще один вопрос: В уроках есть создание групп к которым принадлежит абонент.. Мне нужно нечто подобное сделать, НО под них не создавая отдельных таблиц..

Кейс-ситуация: приложение будет создано для учета ТМЦ и например Сетевых данных компьютеров..
Вход: Имеем таблицу СОТРУДНИКИ, с множеством столбцов... Так же имеем таблицу с подробностями о компах, так же много столбцов.
Необходимо: Сделать связи так, что бы можно было создать выпадающие списки, или что то подобное, для привязки ПОЛЬЗОВАТЕЛЕЙ к компу и наоборот Компа к пользователю.. Не создавая каждого пользователя по два раза, а использую уже имеющийся столбик ФИО в основной базе СОТРУДНИКИ
Выход: Выбрав уже существующего сотрудника можно посмотреть ТТХ его компа , IP и т.д. или выбрав комп - посмотреть кто за ним сидит

Надеюсь это возможно придумать.. У меня был прогресс более или менее, но уже наклацал так что не вспомню как к этому прогрессу вернуться, но там, из выпадающего списка сохранялось значение числовое (я так понимаю порядковый номер строки, без учета сортировки), а не ФИО

EDIT: Выслал вам на почту Проект (Project0_4)

DriveSoft, выручи плиз, понимаю что вопросы у меня более чем емкие, потому как тему "по мелочи" стараюсь не создавать и пишу когда накопятся важные вопросы:

В проекте есть форма внесения данных, кнопка сохранения сделана SQL скриптом (т.к. необходимо добивать некоторые дефолтные значения в базу при сохранении данных (например тип записи "Сотрудник"))
Задачу сохранения данных эта кнопка выполняет хорошо, но есть особенность:
- При нажатии на кнопку визуально не происходит абсолютно ничего

а) Как можно написать в SQL запросе или в скрипте : закрыть форму после сохранения (не обязательно: и обновить таблицу GRID)  (хотелось бы код сразу, если не сложно, что бы не биться головой об код).

б) Как можно написать код скрипта: что бы при нажатии на кнопку "Сохранить" или "Добавить"  появлялась табличка "Запись добавлена/отредактирована успешно"?
Я танцевал с бубном, пытаясь использовать скрипт "Hello World" , стандартный, заменив процедуру на нажатие кнопки, но при запуске проекта то ";" expected, то ")" expected

в) Совсем не обязательно, но каприз такой предвидится: Возможность выбрать закрыть форму добавления данных или продолжить вносить следующую запись.

г) Можно ли в запросе или в скрипте придумать кнопку "отчистить поля для ввода"?

11

(15 replies, posted in Russian)

DriveSoft wrote:

kodecs
Default Value появится в компоненте, только если этот компонент размещен на форме, которая предназначена для добавления/редактирования записи, т.е. эта форма должна быть вызвана с помощью кнопки с действием Новая запись.


к сообщению я приложил пример, как автоматически сделать фамилию с инициалами с помощью скрипта.

Спасибо за скрипт, только он у меня не сработал sad Не знаю почему.. Пытался еще переделать его на событие On click (Button) но тоже эффекта не было sad

12

(15 replies, posted in Russian)

DriveSoft wrote:

kodecs
я бы не рекомендовал увлекаться SQL кодом, иначе теряется все преимущество программы )


на счет  "Type" = "Сотрудник", у компонент Textbox есть свойство DefaultValue, которое позволяет задать значение по умолчанию, во время создания записи, возможно будет лучше туда списать значение Сотрудник.

Да ну, что вы! программа крайне полезна при любых раскладах, она очень простая в освоении!

Просто такие задачи как автоматическое создание ФИО в ней и не требуется, ибо очень уж специфическая задача, а раз уж выход SQL прикручен, почему бы и не попробовать (Если честно напугали слова

на счет Фамилия И.О., можно создать вычисляемое поля следующего вида:
person.lastname || ' ' || upper(substr(person.firstname, 1, 1)) || '.' || upper(substr(person.secondname, 1, 1)) || '.'

smile
А про скрипт вообще не яясно куда его писать как оформлять и как триггерить, но за наводку спасибо, думаю расковыряю)))

PS Я до того как написать предыдущий пост пробовал делать DefaultValue, это значение отображалось только в окне редактирования формы (что кстати помогает запомнить имя каждой формы когда пишешь код в SQL, но когда активируешь окно в программе поле остается пустым и если все заполнить не трогая это поле - ничего не пишется... Короче говоря у меня не работало значение Default Value sad Я даже писал что то типа ="Сотрудник" и ="Sotrudnik" но нет.. sad На работе пока что версия программы 1.38

13

(15 replies, posted in Russian)

DriveSoft wrote:

Могу это посоветовать
http://www.sql.ru/docs/sql/u_sql/


будут вопросы, пишите, помогу )

Ну вот например в какую сторону нужно копать? Почитал я немного, сообразил как написать это:

INSERT into Sotrudniki (Fio, Familia, Ymia, Otchestvo, Kab, Otdel, Login, DataPriemaNA, Type)
VALUES ('{TextFio}', '{TextFamilia}', '{TextYmia}', '{TextOtchestvo}', '{TextKabinet}', '{TextOtdel}', '{TextLogin}', '{DateDataPriema}', "Сотрудник")


Сделано это потому как я хочу что бы при добавлении данных из формы "Добавить сотрудника" в базе сразу делалась отметка в колонке "Type" = "Сотрудник"
И у меня получилось через SQL код приведенный выше
Дальше - больше: Хотелось бы узнать как работать с несколькими значениями из полей для ввода

Например:
Мы имеем три поля '{TextFamilia}', '{TextYmia}', '{TextOtchestvo}' , хотим сделать "Фамилия И.О. ", для этого мне нужно объеденить значения трех полей в одну переменную, например командой CONCAT или CONCATWS.. Когда начал пытаться это вписать в код - (естественно?) это не дало мне результата (что больше меня смущает "CONCAT" даже не подсвечивается как команда)
Работает ли эта команда в прикрученной версии SQL?  Как создается переменная? (DECLARE @Fio as varchar(100)) не срабатывает//
вообще интересно как можно форматировать значения таблиц таким образом.. У меня все таки склад ума остался в экселе, там я делал подобную таблицу которая конвертирует Фамилию имя отчество в ФИО.. А тут в понимании SQL мне это мешает big_smile

14

(15 replies, posted in Russian)

Спасибо большое за код, на скорую руку кинул в проект - заработало! Будем "играться" дальше! smile

Еще один глупый вопрос:
Вчера так же столкнулись с такой проблемой: Решили полезть в дебри SQL, в следствии чего и наткнулись на функцию SELECT и т.д. Возник вопрос: Какой лучше начинать читать мануал для хорошего понимания привязки SQL скриптов к проекту? MySQL, учебники по обычному SQL или какие либо еще.. т.к. читая разичные источники столкнулись с тем что даже функция SELECT описана по разному.
PS уровень знания синтаксиса SQL - ноль, сроки сжатые big_smile может что подскажете? smile

Спасибо, еще раз, за помощь !

15

(15 replies, posted in Russian)

И все-таки вопрос остается открытым, как сделать поиск на Русском и данные для поиска брались с нескольких полей? Сорри, если ответ очевиден, просто с SQL раньше не сталкивался.

16

(15 replies, posted in Russian)

Начал писать базу данных, сначала стандартными средствами, все супер!
Затем столкнулся с проблемой, а заключалась она в том что: Поиск стандартными средствами (Без SQL запроса) позволяет выбирать только ТОЧНЫЕ совпадения..

Прикинув что из за опечатки можно что то не найти, да и при достаточном объеме работы (и базы данных) точный поиск может стать "занозой", решил написать SQL запрос, долго шаманил - ничего не выходит.

SELECT FIRSTNAME FROM EmployeesTABLE WHERE LASTNAME LIKE '%'


Кажется работает как надо, выбирает имена отталкиваясь от совпадений в фамилиях (поскольку "%", то просто отображает все имена в базе)..

Как я ни пытался прицепить в этот код поле с содержащейся фамилией - ничего не выходило (обязательное условие что бы при вводе "ИВА" находило и "ИВАН" в т.ч. (проще говоря, как в код вписать правильно "%", что бы поиск не был "только точное значение"

PS поигравшись дома понял что фейлится именно поиск русских букв, на инглише поиск без привязки к полю работает нормально

SELECT FIRSTNAME FROM EmployeesTABLE WHERE LASTNAME LIKE 'mitr%'


Показывает Mitroshin