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

Запись нескольких значений в одну ячейку

29.09.2014, 12:16. Показов 2978. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть форма в которой создаться маршрут (скрин в вложении)
все строчки записываются в базу есть одно но, поле клиент должно браться из другой базы
необходима возможность выбирать из этого списка несколько клиентов и добавляться в создаваемый маршрут. и вот как это сделать?)
Миниатюры
Запись нескольких значений в одну ячейку  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.09.2014, 12:16
Ответы с готовыми решениями:

Записать в одну ячейку DBGrid текст из нескольких Edit
Всем доброе время суток. Проблема в следующем: 1 DBGrid, 3 TEdit. В DbGrid есть поля (улица, дом, квартира), заполняются с помощью...

Запись нескольких значений из CheckBoxList в одну ячейку таблицы базы данных
Всем доброго времени суток. На данный момент у меня, при выборе из CheckBoxList нескольких значений и нажатии кнопки для отправки...

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

10
129 / 129 / 41
Регистрация: 17.10.2013
Сообщений: 335
29.09.2014, 14:34
возможность выбирать из этого списка несколько клиентов
поискать checkcombobox, например (не проверял работоспособность)
или кинуть на форму Edit, CheckListBox, SpeedButton:
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
procedure TForm1.Button1Click(Sender: TObject);{обработка отмеченных}
var
  i: Integer;
  sl: TStringList;
begin
  sl:= TStringList.Create;
  for i:= 0 to CheckListBox1.Count-1 do
    if CheckListBox1.State[i] = cbChecked
    then sl.Add(CheckListBox1.Items.ValueFromIndex[i]);
  ShowMessage(sl.Text);
  FreeAndNil(sl);
end;
 
procedure TForm1.CheckListBox1ClickCheck(Sender: TObject);{обработка установки/снятия чека}
var
  i: Integer;
  cnt: Integer;
  val: String;
begin
  cnt:= 0;
  val:= '';
  for i:= 0 to CheckListBox1.Count-1 do
    if CheckListBox1.State[i] = cbChecked
    then
      begin
        cnt:= cnt + 1;
        val:= val + CheckListBox1.Items.ValueFromIndex[i] + ';';
      end;
  if cnt > 0
  then Edit1.Text:= val
  else Edit1.Text:= '(нет)';
end;
 
procedure TForm1.CheckListBox1Exit(Sender: TObject);{"сворачивание" при выходе}
begin
  CheckListBox1.Height:= 0;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  Edit1.Text:= '(нет)';
  with CheckListBox1 do
    begin
      Height:= 0;
      Clear;
      {тут в цикле наполнение Items.Add(...);}
    end;
end;
 
procedure TForm1.SpeedButton1Click(Sender: TObject);{"развертывание"}
var
  lbheight: Integer;
begin
  if CheckListBox1.Items.Count < 2
  then lbheight:= CheckListBox1.ItemHeight + 4
  else lbheight:= ((CheckListBox1.Items.Count) * CheckListBox1.ItemHeight + 4);
  if lbheight >= 200
  then lbheight:= 200;
  if CheckListBox1.Height < lbheight
  then
    while CheckListBox1.Height < lbheight do
      CheckListBox1.Height:= CheckListBox1.Height + 1
  else CheckListBox1.Height:= 0;
end;
0
 Аватар для ZfoxAK
670 / 560 / 242
Регистрация: 26.11.2012
Сообщений: 2,191
30.09.2014, 06:36
Цитата Сообщение от sintcar Посмотреть сообщение
поле клиент должно браться из другой базы
Создаешь подключение к другой базе.
Цитата Сообщение от sintcar Посмотреть сообщение
необходима возможность выбирать из этого списка несколько клиентов
варианты разные например открывается еще одна форма, на ней расположить два ListBox. В один ListBox поместить список всех клиентов, во второй переносить тех клиентов которые нужны.
ИМХО заносить в одну запись маршрута перечислением всех клиентов - не очень хороший вариант.
в случае если не ко всем курьер смог заехать, что тогда?
0
0 / 0 / 0
Регистрация: 27.04.2011
Сообщений: 13
01.10.2014, 06:48  [ТС]
Цитата Сообщение от ZfoxAK Посмотреть сообщение
учае если не ко всем курьер смог заехать, что тогда?
Куда он заехал или не заехал данные будут браться из другой таблицы т.к. то что он привезет будет регистрироваться на клиента. и соответственно клиент на которого небыло регистрации будет высвечиваться.

Добавлено через 1 минуту
Цитата Сообщение от ZfoxAK Посмотреть сообщение
ИМХО заносить в одну запись маршрута перечислением всех клиентов - не очень хороший вариант.
а какой вариант хороший?
0
 Аватар для ZfoxAK
670 / 560 / 242
Регистрация: 26.11.2012
Сообщений: 2,191
01.10.2014, 08:25
Цитата Сообщение от sintcar Посмотреть сообщение
а какой вариант хороший?
Я бы сделал так в таблицу вносил бы одна запись на одного клиента.
И таблица выглядила бы так
SQL
1
2
3
4
5
6
7
CREATE TABLE Путь (
    ID_Путь       INTEGER NOT NULL,
    ID_Маршрут INTEGER NOT NULL,
    ID_Курьер    INTEGER NOT NULL,
    ID_Сумка     INTEGER NOT NULL,
    ID_Клиент    INTEGER NOT NULL,
    DATA            DATE  );
Для получения списка клиентов простой запрос
SQL
1
2
3
SELECT Клиент.Имя  FROM Путь 
INNER JOIN Клиент ON Клиент.ID = Путь.ID_Клиент
WHERE ID_Маршрут = 1 AND ID_Курьер = 2
В связи с тем, что структура остальной части БД мне неизвеста, возможно, что предложенный вариант не подойдет по идеологическим соображения..
1
0 / 0 / 0
Регистрация: 27.04.2011
Сообщений: 13
08.10.2014, 09:48  [ТС]
Вроде все понятно но клиентов много на каждый маршрут, и много времени будет уходить на создание маршрута на каждого клиента.
0
 Аватар для ZfoxAK
670 / 560 / 242
Регистрация: 26.11.2012
Сообщений: 2,191
08.10.2014, 10:58
Цитата Сообщение от sintcar Посмотреть сообщение
Вроде все понятно но клиентов много на каждый маршрут, и много времени будет уходить на создание маршрута на каждого клиента.
Это смотря как организовать интерфейс ввода. по сути меняется только имя клиента. Остальная часть запроса Insert Into останется не изменной.
Значить запрос на ввод данных будет выглядить так
SQL
1
2
INSERT INTO Таблица_Путь (ID_Путь, ID_Маршрут, ID_Курьер, ID_Сумка, ID_Клиент)  
  VALUES (:ID_Путь, :ID_Маршрут, :ID_Курьер, :ID_Сумка, :ID_Клиент);
:ID_Путь - с двоеточием это параметр типо переменной но в запросе.
ID_Путь Так как я бы делал это поле с авто инкременом в самой БД, то в запросе это поле следует исключить.
SQL
1
2
INSERT INTO Таблица_Путь (ID_Маршрут, ID_Курьер, ID_Сумка, ID_Клиент)  
  VALUES (:ID_Маршрут, :ID_Курьер, :ID_Сумка, :ID_Клиент);
Останется проделать след манипуляции
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ADOQuery.close; // "отключение" компоненты. 
//Такой вариан рекомендуется на замену ADOQuery.Action:=false;
ADOQuery.SQL.Add('INSERT INTO Таблица_Путь (ID_Маршрут, ID_Курьер, ID_Сумка, ID_Клиент) ');
ADOQuery.SQL.Add('VALUES (:ID_Маршрут, :ID_Курьер, :ID_Сумка, :ID_Клиент)');
ADOQuery.ParamCheck; // проверяет на наличие параметров в запросе
ADOQuery.Parameters.ParamByName('ID_Маршрут').Value:= StrToInt(Edit1.text);
ADOQuery.Parameters.ParamByName('ID_Курьер').Value:=DBLookupComboBox4.KeyValue;
ADOQuery.Parameters.ParamByName('ID_Сумка').Value:=10;
For i:=0 to кол-во клиентов из списка - 1 do
begin
ADOQuery.Parameters.ParamByName('ID_Клиент').Value:=ListBox1.items[i];
ADOQuery.ExecSQL; // выполнение SQL запросов вносящих изменения типо Insert, Delete 
ADOQuery.Post; // Сообщение подвтержения записи
ADOQuery.close;
end;
Вроде ничего не упустил.
0
129 / 129 / 41
Регистрация: 17.10.2013
Сообщений: 335
08.10.2014, 11:15
еще раз вклинюсь...
а если вместо ListBox'а использовать CheckListBox, то окончание кода может быть таким:

Delphi
1
2
3
4
5
6
7
8
9
10
...
  ADOQuery.Parameters.ParamByName('ID_Сумка').Value:=10;  
  for i:= 0 to CheckListBox1.Count-1 do
  if CheckListBox1.State[i] = cbChecked
    then
      begin
        ADOQuery.Parameters.ParamByName('ID_Клиент').Value:=
          CheckListBox1.Items.ValueFromIndex[i];
        ADOQuery.ExecSQL; // выполнение SQL запросов вносящих изменения типо Insert, Delete 
...
0
 Аватар для ZfoxAK
670 / 560 / 242
Регистрация: 26.11.2012
Сообщений: 2,191
08.10.2014, 11:54
Цитата Сообщение от andrey_k3 Посмотреть сообщение
if CheckListBox1.State[i] = cbChecked then
ADOQuery.Parameters.ParamByName('ID_Клие нт').Value:=
CheckListBox1.Items.ValueFromIndex[i];
Интересуюсь для себя - чем плох код?
Delphi
1
2
if CheckListBox1.Checked[i] then 
ADOQuery.Parameters.ParamByName('ID_Клиент').Value:=CheckListBox1.Items[i];
0
08.10.2014, 13:23

Не по теме:

Цитата Сообщение от ZfoxAK Посмотреть сообщение
для себя - чем плох код?
ни чем, даже оптимальнее. дурная привычка - "скопировал/вставил", писал давно (может со статусами экспериментировал, не помню), руки не дошли привести к нормальному виду. так что - спасибо за замечание!

0
09.10.2014, 05:14

Не по теме:

Цитата Сообщение от andrey_k3 Посмотреть сообщение
ни чем, даже оптимальнее. дурная привычка - "скопировал/вставил", писал давно (может со статусами экспериментировал, не помню), руки не дошли привести к нормальному виду. так что - спасибо за замечание!
Это не было замечанием. Мне было интересно может я какой нюанс упустил, что через статус проверяется. Код рабочий - почему и не использовать!

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.10.2014, 05:14
Помогаю со студенческими работами здесь

Запись данных из нескольких инпутов в одну ячейку бд
Здравствуйте. Так как на этому языку я учусь совсем недавно, у меня возникла проблема. Есть код страницы на которой форма с категориями...

Вынесение значений нескольких Label в одну ячейку Excel
Есть у меня макрос, выносящий данные из формы на лист exel. Все было прекрасно, но необходимо чтобы дата, содержащаяся в 3 разных label...

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

Запись в ячейку значений из нескольких других
Здравствуйте! Сам макросы пишу плохо.....В общем помогите пожалуйста. Макрос должен значения ячеек фамилия2,имя2,отчество2,дата...

Разбить одну запись на несколько по текстовому полю с перечислением нескольких значений
Просьба помочь со следующей проблемой. В одном определенном текстовом поле записей базы данных находится переменное количество (от 1 до...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru