С Новым годом! Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 02.02.2015
Сообщений: 7
1

Заполнить столбец БД xml, присвоить строчкам идентификаторы, и присвоить каждой ячейке с xml свое значение

06.02.2015, 11:20. Показов 999. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, уважаемые форумчане!
Столкнулся со сложностью! мое приложение заполняет БД (MSSQL2008) по нажатию кнопки. Каждому идентификатору(столбец) она вставляет xml(столбец).
Сложность заключается в том, что для различных идентификаторов нужно проставить различные значения в строку xml, в данном случае это Node.Attributes['ActDuration'].
Понимаю что надо делать циклом, но нчего толкового на ум не приходит!
Помогите разобраться, наведите на мысль! всем спасибо!
Собственно код записи в БД:
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
procedure TForm2.btnAddNewClick(Sender: TObject);
var
  Root, Node: IXMLNode;
  s: string;
  i:integer;
  begin
for i := 0 to Nextgrid2.Rowcount - 1 do
begin
 
  XMLDoc.Active := true;
  XMLDoc.LoadFromXML(xmlstring);
  Root := XMLDoc.ChildNodes.FindNode('Tasks');
  Node := Root.AddChild('Task');
  Node.Attributes['Name'] := VL.Values
    ['Обозначение детали(наименование работ)'];
  Node.Attributes['Zakaz'] := VL.Values['Учетные коды заказов'];
  Node.Attributes['Operation'] := VL.Values['№ операции по МСК'];
  Node.Attributes['PlanQTY'] := VL.Values['Заданное кол-во, шт.'];
  Node.Attributes['PlanDuration'] := VL.Values['Заданное время, ч.'];
  Node.Attributes['ActQTY'] := VL.Values['Выполненное кол-во, шт.'];
  Node.Attributes['ActDuration'] := StringGrid1.Cells[Stringgrid1.col-1,i+1];
  Node.Attributes['Comments'] := VL.Values['Комментарий'];
  XMLDoc.SaveToXML(xmlstring);
  XMLDoc.Active := false;
  FillTasks;
  WriteToDB;
  VL.Values['Обозначение детали(наименование работ)'] := '';
  VL.Values['Учетные коды заказов'] := '';
  VL.Values['№ операции по МСК'] := '';
  VL.Values['Заданное кол-во, шт.'] := '';
  VL.Values['Заданное время, ч.'] := '';
  VL.Values['Выполненное кол-во, шт.'] := '';
  VL.Values['Затраченное время,ч.'] := '';
  VL.Values['Комментарий'] := '';
 
end;
  end;
Код процедуры writetodb:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
procedure TForm2.WriteToDB;
var
  Q: TADOQuery;
begin
  Q := TADOQuery.Create(nil);
  Q.Connection := FConnections.ADOConnectionReports;
  Q.SQL.Text :=
    'select OverTimeID from ZVZD_OVERTIMES where OverTimeUserUID=:uid and OverTimeDate=:date';
  Q.Parameters.ParamByName('uid').Value := NextGrid1.Cell[colUserUID.Index,
    NextGrid1.SelectedRow].AsString;
  Q.Parameters.ParamByName('date').Value := NextGrid2.Cell[colDate.Index,
    NextGrid2.SelectedRow].AsString;
  Q.ExecSQL;
  with Q do
  begin
    open;
    edtRecID.Text := 'ID=' + FieldByname('OverTimeID').AsString;
    close;
  end;
  freeandnil(Q);
end;
nextgrid2 - таблица с юзерами
stringgrid1- дублер nextgrid2, в колонку которого я вношу значения Node.Attributes['ActDuration']

Буду очень признателен за ваши ценные рекомендации, конструктивную критику и за наведение меня на путь истинный. Ну только не надо говорить что мне не надо этим заниматься)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.02.2015, 11:20
Ответы с готовыми решениями:

Как можно присвоить значение атрибута одного XML файла атрибута из другого XML файла?
привет, при генерации с помощью SAX некоторого xml файла, как можно присвоить точно такое же...

Присвоить ячейке значение TextBox
Доброго времени суток! Подскажите пожалуйста, как передать значение из поля формы Excel TextBox1 в...

Как присвоить ячейке значение переменной
ну вообщем, например я высчитывал значение переменной и надо занести её значение в ячейку формы....

Не получается присвоить произвольное значение ячейке
Данный код ни какой смысловой нагрузки не несет Function Test(a As Range, ra As Range) As...

3
0 / 0 / 0
Регистрация: 02.02.2015
Сообщений: 7
09.02.2015, 13:31  [ТС] 2
Какие то у меня не интересные темы видимо... Товарищи, кто нибудь! Хэлп!
0
0 / 0 / 0
Регистрация: 02.02.2015
Сообщений: 7
11.02.2015, 08:46  [ТС] 3
Нароод!
0
0 / 0 / 0
Регистрация: 02.02.2015
Сообщений: 7
18.02.2015, 09:04  [ТС] 4
Решение найдено!
В общем ниже текст процедуры filltasks, которую я не привел прежде :
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
66
67
procedure TFOrm2.FillTasks;
var
  i,k: Integer;
  Root, Node: IXMLNode;
  Q: TADOQuery;
begin
 NextGrid5.ClearRows;
  XMLDoc.Active := true;
  XMLDoc.LoadFromXML(xmlstring);
  Root := XMLDoc.ChildNodes.FindNode('Tasks');
  if Root = nil then
  begin
    XMLDoc.Active := false;
    exit;
  end;
  if Root.ChildNodes.Count = 0 then
  begin
    XMLDoc.Active := false;
    exit;
  end;
 
  for i := 0 to Root.ChildNodes.Count - 1 do
  begin
    Node := Root.ChildNodes[i];
    NextGrid5.AddRow();
    NextGrid5.Cell[colTaskDescription.Index,
      NextGrid5.LastAddedRow].AsString := Node.Attributes['Name'];
    NextGrid5.Cell[colTaskXML.Index, NextGrid5.LastAddedRow].AsString :=
      Node.XML;
  end;
  for k:=0 to Nextgrid2.RowCount do
  begin
 
  {XMLDoc.Active := false;
  Q := TADOQuery.Create(nil);
  Q.Connection := FConnections.ADOConnectionReports;
  Q.SQL.Text :=
    'if exists (select ID from [dbo].[OVERTIME] where OverTimeUserUID=:uid and OverTimeDate=:date)';
  Q.SQL.Add('begin');
  Q.SQL.Add(
    'update .[dbo].[OVERTIME] set OverTimeXML=:xml where OverTimeUserUID=:uid1 and OverTimeDate=:date1');
  Q.SQL.Add('end');
  Q.SQL.Add('else');
  Q.SQL.Add('begin');
  Q.SQL.Add(
    'insert into [dbo].[OVERTIME](OverTimeUserUID,OverTimeDate,OverTimeXML,OverTimeAddedBy,OverTimeAddedAt) values (:uid2,:date2,:xml1,:author,:time)');
  Q.SQL.Add('end');
  Q.Parameters.ParamByName('uid').Value := NextGrid1.Cell[colUserUID.Index,
    NextGrid1.SelectedRow].AsString;
  Q.Parameters.ParamByName('uid1').Value := NextGrid1.Cell[colUserUID.Index,
    NextGrid1.SelectedRow].AsString;
   Q.Parameters.ParamByName('uid2').Value := NextGrid2.Cell[colUserID.Index,
    k].AsString;
  Q.Parameters.ParamByName('date').Value := NextGrid2.Cell[colDate.Index,
    NextGrid2.SelectedRow].AsString;
  Q.Parameters.ParamByName('date1').Value := NextGrid2.Cell[colDate.Index,
    NextGrid2.SelectedRow].AsString;
  Q.Parameters.ParamByName('date2').Value := NextGrid2.Cell[colDate.Index,
    NextGrid2.SelectedRow].AsString;
  Q.Parameters.ParamByName('xml').Value := xmlstring;
  Q.Parameters.ParamByName('xml1').Value := xmlstring;
  Q.Parameters.ParamByName('author').Value := FConnections.full_name;
  Q.Parameters.ParamByName('time').Value := dtpStart.Date;
  Q.ExecSQL;
  freeandnil(Q); }
end;
end;
В фигурных скобках, то чего нет в финально варианте, но было изначально. Вся проблема с циклами.
Код на кнопке финал:
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
procedure TForm2.btnAddNewClick(Sender: TObject);
var
  Root, Node: IXMLNode;
  s,xml2: string;
  i,k,j:integer;
  Q: TADOQuery;
  begin
for i := 0 to  nextgrid2.Rowcount - 1 do
begin
 
  XMLDoc.Active := true;
  XMLDoc.LoadFromXML(xmlstring);
  Root := XMLDoc.ChildNodes.FindNode('Tasks');
  Node := Root.AddChild('Task');
  Node.Attributes['Name'] := VL.Values
    ['Обозначение детали(наименование работ)'];
  Node.Attributes['Zakaz'] := VL.Values['Учетные коды заказов'];
  Node.Attributes['Operation'] := VL.Values['№ операции по МСК'];
  Node.Attributes['PlanQTY'] := VL.Values['Заданное кол-во, шт.'];
  Node.Attributes['PlanDuration'] := VL.Values['Заданное время, ч.'];
  Node.Attributes['ActQTY'] := VL.Values['Выполненное кол-во, шт.'];
  Node.Attributes['ActDuration'] :=NextGrid2.cell[colDuration.Index,i].AsString;
  Node.Attributes['Comments'] := VL.Values['Комментарий'];
  XMLDoc.SaveToXML(xml2);
  XMLDoc.Active := false;
  showmessage(xml2);
  //FillTasks;
  //WriteToDB;
 
  Q := TADOQuery.Create(nil);
  Q.Connection := FConnections.ADOConnectionReports;
  Q.SQL.Text :=
    'if exists (select ID from [dbo].[OVERTIME] where OverTimeUserUID=:uid and OverTimeDate=:date)';
  Q.SQL.Add('begin');
  Q.SQL.Add(
    'update [dbo].[OVERTIME] set OverTimeXML=:xml where OverTimeUserUID=:uid1 and OverTimeDate=:date1');
  Q.SQL.Add('end');
  Q.SQL.Add('else');
  Q.SQL.Add('begin');
  Q.SQL.Add(
    'insert into [dbo].[OVERTIME](OverTimeUserUID,OverTimeDate,OverTimeXML,OverTimeAddedBy,OverTimeAddedAt) values (:uid2,:date2,:xml1,:author,:time)');
  Q.SQL.Add('end');
  Q.Parameters.ParamByName('uid').Value := NextGrid1.Cell[colUserUID.Index,
    NextGrid1.SelectedRow].AsString;
  Q.Parameters.ParamByName('uid1').Value := NextGrid1.Cell[colUserUID.Index,
    NextGrid1.SelectedRow].AsString;
   Q.Parameters.ParamByName('uid2').Value := NextGrid2.Cell[colUserID.Index,
    i].AsString;
  Q.Parameters.ParamByName('date').Value := NextGrid2.Cell[colDate.Index,
    NextGrid2.SelectedRow].AsString;
  Q.Parameters.ParamByName('date1').Value := NextGrid2.Cell[colDate.Index,
    NextGrid2.SelectedRow].AsString;
  Q.Parameters.ParamByName('date2').Value := NextGrid2.Cell[colDate.Index,
    NextGrid2.SelectedRow].AsString;
  Q.Parameters.ParamByName('xml').Value := xml2;
  Q.Parameters.ParamByName('xml1').Value := xml2;
  Q.Parameters.ParamByName('author').Value := FConnections.full_name;
  Q.Parameters.ParamByName('time').Value := dtpStart.Date;
  Q.ExecSQL;
  freeandnil(Q);
  XMLDoc.Active := false;
end;
end;
Может быть кому то поможет. Всем спасибо, все свободны)
Разговор с самим собой
0
18.02.2015, 09:04
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.02.2015, 09:04
Помогаю со студенческими работами здесь

Присвоить ячейке значение = названию листа
Сабж. Есть книга 30 листов. в каждом листе в определенной ячейке нужно задать значение. Значение...

не могу присвоить значение к ячейке DataGridView
присваиваю источник таблице: var q = from days in _db.GetTable<days_sessions_t>() ...

Присвоить значение к конкретной ячейке Datagrid
Подскажите пожалуйста, как присвоить значение к конктретной ячейке datagrid? private void...

Как присвоить ячейке неопределённое значение в DBGrid?
Вопрос состоит в том как присвоить нулевое значение внешнего ключа при вставке в DBGrid? В таблице...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Администрирован­­­­ие Git, продвинутые техники работы с Git
InfoMaster 11.01.2025
Основы управления репозиторием Эффективное управление Git-репозиторием требует глубокого понимания механизмов контроля доступа и инструментов администрирования. Рассмотрим ключевые аспекты. . .
Что такое HCL Notes и как с ним работать
InfoMaster 10.01.2025
HCL Notes (ранее известный как IBM Notes и Lotus Notes) представляет собой комплексную платформу для совместной работы и обмена информацией в корпоративной среде. Это многофункциональное решение,. . .
Как работать с Git из Windows и Visual Studio
InfoMaster 10.01.2025
Работа с Git в Windows Работа с Git в операционной системе Windows может быть осуществлена с помощью различных инструментов, каждый из которых обладает своими уникальными возможностями и. . .
Аналог оператора switch case в Python
InfoMaster 10.01.2025
Оператор switch case используется в программировании для выбора одного из нескольких вариантов исполнения кода. Однако в языке Python этот оператор отсутствует. Понимание аналогов switch case в. . .
Отличия абстрактного класса от интерфейса
InfoMaster 10.01.2025
В современной разработке программного обеспечения существуют два основных механизма реализации абстракции: абстрактные классы и интерфейсы. Эти инструменты, хотя и схожи в своей основной цели -. . .
Как работать в Git
InfoMaster 10.01.2025
Git — это одна из наиболее популярных систем контроля версий, которая активно используется разработчиками по всему миру. Она позволяет эффективно управлять изменениями в коде, координировать работу. . .
Реализация передвижения персонажа в Unity3d на C#
InfoMaster 10.01.2025
Реализация передвижения персонажа в Unity3D начинается с правильной настройки проекта. Этот этап критически важен для создания отзывчивого и плавного управления. Рассмотрим основные шаги для создания. . .
Docker: руководство для начинающих
InfoMaster 10.01.2025
В современном мире разработки программного обеспечения контейнеризация стала неотъемлемой частью процесса создания и развертывания приложений. Docker, как ведущая платформа контейнеризации, произвела. . .
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru