Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
 Аватар для bootleanC
6 / 6 / 2
Регистрация: 28.04.2009
Сообщений: 106

Не заполняет значения в базу

23.10.2012, 14:59. Показов 1482. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Делая курсовую работу по БД столкнулся с проблемой в программе(которую я должен создать) не заполняет результат в саму базу.
Вообщем дело вот в чем. У меня есть БД созданная в MSSQL там порядка 6 таблиц. в приложении я подсоединил базу с помощью АДОконекшен потом АДОдатасетом сделал выборку и через ДБдатасоурс загружаю в ДБгрид там получается табличка созданная из нескольких таблиц самой БД сделал создал два ДБлукКомбобокса загрузил в них данные из БД они даже заполняют правильно...но беда в том что в конечном итоге в той табличке которая хотелось бы чтобы была заполнена не появляются id тех записей которые выбраны в комбобоксах
SQL
1
SELECT med.id_med, med.n_med, ed.n_ed, cat.n_cat FROM med, ed,cat WHERE med.id_ed = ed.id_ed AND med.id_cat = cat.id_cat;
.вот в конкретно в этом примере в таблице med должны быть с каждой строке в столбцах med.id_ed и med.id_cat индексы значений тех именно данных что я выбираю в комбобоксах
Сначала выходила какая то ошибка но когда добавил авто заполнение id столбцов в БД ошибка перестала вылазить...а индексы все равно не сохраняет

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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, DBCtrls, DB, ADODB, Grids, DBGrids, Menus, StdCtrls;
 
type
  TForm1 = class(TForm)
    ADOConnection1: TADOConnection;
    DBGrid1: TDBGrid;
    ADODataSet1: TADODataSet;
    DataSource1: TDataSource;
    DBNavigator1: TDBNavigator;
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    N5: TMenuItem;
    N6: TMenuItem;
    N7: TMenuItem;
    N8: TMenuItem;
    N9: TMenuItem;
    N10: TMenuItem;
    N11: TMenuItem;
    N12: TMenuItem;
    DBLookupComboBox1: TDBLookupComboBox;
    DBLookupComboBox2: TDBLookupComboBox;
    ADODataSet2: TADODataSet;
    ADODataSet3: TADODataSet;
    DataSource2: TDataSource;
    DataSource3: TDataSource;
    procedure N2Click(Sender: TObject);
    procedure N6Click(Sender: TObject);
    procedure N7Click(Sender: TObject);
    procedure N8Click(Sender: TObject);
    procedure N4Click(Sender: TObject);
    procedure N12Click(Sender: TObject);
    procedure N5Click(Sender: TObject);
    procedure N9Click(Sender: TObject);
    procedure N10Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
uses Unit2;
 
procedure TForm1.N2Click(Sender: TObject);
begin
  Form1.Close;
end;
 
procedure TForm1.N4Click(Sender: TObject);
begin
  form1.ADODataSet1.Active := False;
  form1.ADODataSet1.CommandText := 'select med.id_med, med.n_med, ed.n_ed, cat.n_cat from med, ed, cat where med.id_ed = ed.id_ed and med.id_cat = cat.id_cat;';
  form1.ADODataSet1.Active := True;
  Form1.DBGrid1.Columns[0].Title.Caption:= 'Íîìåð';
  Form1.DBGrid1.Columns[1].Title.Caption:= 'Íàçâàíèå ìåäèêàìåíòà';
  Form1.DBGrid1.Columns[2].Title.Caption:= 'Åäåíèöà èçìåðåíèÿ';
  Form1.DBGrid1.Columns[3].Title.Caption:= 'Êàòåãîðèÿ';
  {
  form1.DBLookupComboBox1.DataSource := Form1.DataSource1;
  form1.DBLookupComboBox1.DataField := 'n_ed';
  form1.DBLookupComboBox1.ListSource := Form1.DataSource2;
  form1.DBLookupComboBox1.KeyField := 'n_ed';
  form1.DBLookupComboBox1.ListField := 'n_ed';
 
  form1.DBLookupComboBox2.DataSource := Form1.DataSource1;
  form1.DBLookupComboBox2.DataField := 'n_cat';
  form1.DBLookupComboBox2.ListSource := Form1.DataSource3;
  form1.DBLookupComboBox2.KeyField := 'n_cat';
  form1.DBLookupComboBox2.ListField := 'n_cat';
    }
end;
 
procedure TForm1.N5Click(Sender: TObject);
begin
  form1.ADODataSet1.Active := False;
  form1.ADODataSet1.CommandText := 'select * from apt;';
  form1.ADODataSet1.Active := True;
  Form1.DBGrid1.Columns[0].Title.Caption:= 'Íîìåð';
  Form1.DBGrid1.Columns[1].Title.Caption:= 'Íàçâàíèå';
  Form1.DBGrid1.Columns[2].Title.Caption:= 'Àäðåñ';
  Form1.DBGrid1.Columns[3].Title.Caption:= 'Äàòà ðåãèñòðàöèè';
  Form1.DBGrid1.Columns[4].Title.Caption:= 'ÔÈÎ Çàâåäóþùåãî';
end;
 
procedure TForm1.N6Click(Sender: TObject);
begin
  form1.ADODataSet1.Active := False;
  form1.ADODataSet1.CommandText := 'select * from cat';
  form1.ADODataSet1.Active := True;
  Form1.DBGrid1.Columns[0].Title.Caption:= 'Íîìåð';
  Form1.DBGrid1.Columns[1].Title.Caption:= 'Êàòåãîðèÿ';
end;
 
procedure TForm1.N7Click(Sender: TObject);
begin
  form1.ADODataSet1.Active := False;
  form1.ADODataSet1.CommandText := 'select * from ed';
  form1.ADODataSet1.Active := True;
  Form1.DBGrid1.Columns[0].Title.Caption:= 'Íîìåð';
  Form1.DBGrid1.Columns[1].Title.Caption:= 'Åäèíèöà èçìåðåíèÿ';
end;
procedure TForm1.N8Click(Sender: TObject);
begin
  form1.ADODataSet1.Active := False;
  form1.ADODataSet1.CommandText := 'select * from post';
  form1.ADODataSet1.Active := True;
  Form1.DBGrid1.Columns[0].Title.Caption:= 'Íîìåð';
  Form1.DBGrid1.Columns[1].Title.Caption:= 'Íàèìåíîâàíèå';
end;
 
procedure TForm1.N9Click(Sender: TObject);
begin
  form1.ADODataSet1.Active := False;
  form1.ADODataSet1.CommandText := 'select spr.id_tov, med.n_med, post.n_post, spr.date_pr, spr.vh_cena, spr.nacen, spr.ot_cena, spr.kol_vo from spr, med, post where spr.id_med = med.id_med and spr.id_post = post.id_post;';
  form1.ADODataSet1.Active := True;
  Form1.DBGrid1.Columns[0].Title.Caption:= 'Íîìåð';
  Form1.DBGrid1.Columns[1].Title.Caption:= 'Íàçâàíèå ìåäèêàìåíòà';
  Form1.DBGrid1.Columns[2].Title.Caption:= 'Íàçâàíèå ïîñòàâùèêà';
  Form1.DBGrid1.Columns[3].Title.Caption:= 'Äàòà ïðèõîäà';
  Form1.DBGrid1.Columns[4].Title.Caption:= 'Âõîäíàÿ öåíà';
  Form1.DBGrid1.Columns[5].Title.Caption:= 'Íàöåíêà';
  Form1.DBGrid1.Columns[6].Title.Caption:= 'Îòïóñêíàÿ';
  Form1.DBGrid1.Columns[7].Title.Caption:= 'Êîëè÷åñòâî';
end;
 
procedure TForm1.N10Click(Sender: TObject);
begin
  form1.ADODataSet1.Active := False;
  form1.ADODataSet1.CommandText := 'select pok.id_pok, pok.date_pok, apt.n_apt, pok.fio_pok, pok.nom_rec, pok.ot_cena, spi.kol_vo, pok.ob_sum from pok, apt, spi, spr where pok.id_apt = apt.id_apt and pok.id_pok = spi.id_pok and spi.kol_vo <= spr.kol_vo;';
  form1.ADODataSet1.Active := True;
  Form1.DBGrid1.Columns[0].Title.Caption:= 'Íîìåð';
  Form1.DBGrid1.Columns[1].Title.Caption:= 'Äàòà ïîêóïêè';
  Form1.DBGrid1.Columns[2].Title.Caption:= 'Íàçâàíèå àïòåêè';
  Form1.DBGrid1.Columns[3].Title.Caption:= 'ÔÈÎ ïîêóïàòåëÿ';
  Form1.DBGrid1.Columns[4].Title.Caption:= 'Íîìåð ðåöåïòà';
  Form1.DBGrid1.Columns[5].Title.Caption:= 'Îòïóñêíàÿ öåíà';
  Form1.DBGrid1.Columns[6].Title.Caption:= 'Êîëè÷åñòâî';
  Form1.DBGrid1.Columns[7].Title.Caption:= 'Îáùàÿ ñóììà';
end;
 
procedure TForm1.N12Click(Sender: TObject);
begin
 
  Form2.ADODataSet3.Connection := form1.ADOConnection1;
  Form2.ADODataSet3.Active := False;
  form2.ADODataSet3.CommandText := 'select med.id_med, med.n_med, ed.n_ed, cat.n_cat from med, ed,cat where med.id_ed = ed.id_ed and med.id_cat = cat.id_cat;';
  Form2.ADODataSet3.Active := True;
  Form2.DBGrid1.DataSource := form2.DataSource3;
  Form2.DBGrid1.Columns[0].Title.Caption:= 'Íîìåð';
  Form2.DBGrid1.Columns[1].Title.Caption:= 'Íàèìåíîâàíèå';
  Form2.DBGrid1.Columns[2].Title.Caption:= 'Åäåíèöà èçìåðåíèÿ';
  Form2.DBGrid1.Columns[3].Title.Caption:= 'Êàòåãîðèÿ';
 
  form2.DBLookupComboBox1.DataSource := Form2.DataSource3;
  form2.DBLookupComboBox1.DataField := 'n_ed';
  form2.DBLookupComboBox1.ListSource := Form2.DataSource1;
  form2.DBLookupComboBox1.KeyField := 'n_ed';
  form2.DBLookupComboBox1.ListField := 'n_ed';
  Form2.DBText1.DataSource := form2.DataSource3;
  form2.DBText1.DataField := 'n_ed';
 
  form2.DBLookupComboBox2.DataSource := Form2.DataSource3;
  form2.DBLookupComboBox2.DataField := 'n_cat';
  form2.DBLookupComboBox2.ListSource := Form2.DataSource2;
  form2.DBLookupComboBox2.KeyField := 'n_cat';
  form2.DBLookupComboBox2.ListField := 'n_cat';
  Form2.DBText2.DataSource := form2.DataSource3;
  form2.DBText2.DataField := 'n_cat';
  Form2.ShowModal;
end;
 
 
end.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.10.2012, 14:59
Ответы с готовыми решениями:

WCF не заполняет базу данных
Добрый вечер! проблема в том что в wfc метод, который вызывается со стороны клиента на добавление данных в бд не работает, как это...

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

Напишите программу, которая заполняет массив из 30 элементов случайными числами в диапазоне от 0 до 100, и выводит значения элементов массива на экран
2. Напишите программу, которая заполняет массив из 30 элементов случайными числами в диапазоне от 0 до 100, и выводит значения элементов...

19
71 / 71 / 7
Регистрация: 19.07.2011
Сообщений: 357
23.10.2012, 21:40
...там получается табличка созданная из нескольких таблиц...
не сохраняет, скорее всего, из-за этого. Таблица сводная искусственная.
Куда хочешь сохранять комбинацию НОВЫХ значений или ИЗМЕНЕННЫХ значений - скорее всего, простая таблица. Для ее обновления/вставки новых записей надо вызывать Update script или Insert script, в который передавать изменяемые/вводимые значения полей.
1
 Аватар для bootleanC
6 / 6 / 2
Регистрация: 28.04.2009
Сообщений: 106
24.10.2012, 06:36  [ТС]
ну я понял что она искусственная, но ведь когда я прописывал запрос SQL я указывал что индексы должны быть равны.
а как реализовать insert или update script???сам запрос я записываю в
Delphi
1
form1.ADODataSet1.CommandText :=
можно ли туда же написать это?
вот мои три таблички
SQL
1
2
3
4
5
6
7
8
9
10
11
CREATE TABLE ed (
id_ed INT PRIMARY KEY IDENTITY(1,1) NOT NULL,
n_ed VARCHAR(15));
CREATE TABLE cat (
id_cat INT PRIMARY KEY IDENTITY(1,1) NOT NULL,
n_cat VARCHAR(25));
CREATE TABLE med (
id_med INT PRIMARY KEY IDENTITY(1,1) NOT NULL,
n_med VARCHAR(35),
id_ed INT,
id_cat INT);
в таблицу med должны хранится id-шники таблиц ed и cat
Заранее спасибо за помощь.

Добавлено через 6 минут
само действие должно происходить в
Delphi
1
procedure TForm1.N12Click(Sender: TObject);
0
71 / 71 / 7
Регистрация: 19.07.2011
Сообщений: 357
24.10.2012, 09:08
ну классически запрос на вставку выглядит так:

INSERT INTO med
(n_med
,id_ed
,id_cat)
VALUES
(n_med,id_ed,id_cat)

а если его надо "вписать" в CommandText, то примерно так:

Delphi
1
2
3
4
5
6
7
8
9
                with MySuperInsertZapros do
                  begin
                  CommandText:= 'INSERT INTO med VALUES('
                  + QuotedStr(myn_medString)
                  +','+ IntToStr(myid_ed)
                  +','+ IntToStr(myid_cat)+')';
                  Prepared:= True;
                  Execute;
                 end; // end execution of Insert statement
если просто проапдейтить что-то:
Delphi
1
2
3
4
5
6
    with MySuperUpdateZapros do
        begin
          CommandText := 'Update med set m_med='+QuotedStr(myn_med)+' where id_med=' +IntToStr(myid_identificator);
              Prepared    := True;
              Execute;
        end; // end execution of UPDATE statement
1
 Аватар для bootleanC
6 / 6 / 2
Регистрация: 28.04.2009
Сообщений: 106
24.10.2012, 10:02  [ТС]
Цитата Сообщение от zremas Посмотреть сообщение
MySuperInsertZapros
извиняюсь за незнание...а ведь надо как то описать эту функцию, я так понимаю?
0
71 / 71 / 7
Регистрация: 19.07.2011
Сообщений: 357
24.10.2012, 10:16
ты же сам знаешь все:

Код Delphi
form1.ADODataSet1.CommandText :=
я подразумеваю твое собственное название вместо My.......

with ADODataSet1 do

только лучше использовать ADOCommand

with ADOCommand1 do.....
1
 Аватар для bootleanC
6 / 6 / 2
Регистрация: 28.04.2009
Сообщений: 106
24.10.2012, 10:40  [ТС]
Delphi
1
2
3
4
5
6
7
8
9
10
11
begin
with ADOCommand1 do
begin
  Form2.ADOCommand1.CommandText:= 'INSERT INTO med VALUES('
  + QuotedStr(med_n)
  +','+ IntToStr(med_id_ed)
  +','+ IntToStr(med_id_cat)+')';
  Prepared:= True;
  Execute;
end;
end;
Пишет ошибку на строке 2 Undeclared identifier: 'ADOCommand1'
0
71 / 71 / 7
Регистрация: 19.07.2011
Сообщений: 357
24.10.2012, 11:01
а зачем так сложно?!

есть форма, на ней лежит некий ADOCommand1.....+ всякие гриды, кнопки, комбо....
на одной из кнопок, скорее всего, навесил:
Delphi
1
2
3
4
5
6
7
8
9
with ADOCommand1 do
begin
  CommandText:= 'INSERT INTO med VALUES('
  + QuotedStr(med_n)
  +','+ IntToStr(med_id_ed)
  +','+ IntToStr(med_id_cat)+')';
  Prepared:= True;
  Execute;
end;
в общем, надо бы почитать руководства Как работать с ADO компонентами, прежде чем курсовую писать.
и вообще, как же вас там учат, что даже основы работы с этими вещами почти никто не знает.
1
 Аватар для bootleanC
6 / 6 / 2
Регистрация: 28.04.2009
Сообщений: 106
24.10.2012, 13:31  [ТС]
у меня есть DBGrid1 и под ним DBNavigator1 хотелось чтобы по нажатию галочки в навигаторе происходила запись...у меня было так что просто поля id_ed и id_cat в таблице med в самой базе просто не заполняются

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

Добавлено через 1 час 59 минут
Сделал так
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm2.Button1Click(Sender: TObject);
begin
with ADODataSet3 do
begin
  CommandText:= 'INSERT INTO med VALUES('
  + QuotedStr(Form2.DBGrid1.Columns[1].Field.AsString)
  +','+ IntToStr(Form2.DBGrid1.Columns[2].Field.AsInteger)
  +','+ IntToStr(Form2.DBGrid1.Columns[3].Field.AsInteger)+')';
  Prepared:= True;
  Execute;
end;
end
ругаеться на Execute. пишет "Undeclared identifier: 'Execute'
и еще вопрос. можно ли без кнопки обойтись? хотелось бы чтобы при нажатии на кнопку навигатора происходила вставка

Добавлено через 15 минут
без Excute запускается но ничего не происходиттакая же ситуация...записывается только первый столбец. данные из двух последний столбцов добавляются в свои таблицы откуда взяты данные,что нежелательно...ибо образуется повторение((( как избежать этого и добиться все таки добавления id-шников в нужную мне таблицу?
0
71 / 71 / 7
Регистрация: 19.07.2011
Сообщений: 357
24.10.2012, 18:12
Цитата Сообщение от bootleanC Посмотреть сообщение
ругаеться на Execute. пишет "Undeclared identifier: 'Execute'
...
без Excute запускается но ничего не происходиттакая же ситуация...записывается только первый столбец. данные из двух последний столбцов добавляются в свои таблицы откуда взяты данные,что нежелательно...ибо образуется повторение((( как избежать этого и добиться все таки добавления id-шников в нужную мне таблицу?
Я же писал:
только лучше использовать ADOCommand
with ADOCommand1 do.....
к нему применимо Execute
1
 Аватар для bootleanC
6 / 6 / 2
Регистрация: 28.04.2009
Сообщений: 106
26.10.2012, 08:02  [ТС]
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
procedure TForm2.DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
begin
  case Button of
    nbinsert:begin
    with ADOCommand1 do
begin
  CommandText:= 'INSERT INTO med VALUES('
  +QuotedStr(Form2.DBGrid1.Columns[1].Field.AsString)+','
  +'select id_ed from ed  where n_ed='+ Form2.DBGrid1.Columns[2].Field.AsString+';'+','
  +'select id_cat from cat  where n_cat='+Form2.DBGrid1.Columns[3].Field.AsString+';'+')';
  Prepared:= True;
  Execute;
end;
 
end;
 
end;
 
end;
сделал так...по идее должен добавлять уже точно в таблицу med, а добавление происходит как и раньше добавляет таблицу откуда взяты значения а не id-шники этих значений в таблицу мед
0
71 / 71 / 7
Регистрация: 19.07.2011
Сообщений: 357
26.10.2012, 10:40
боже, какой-то бред....

надо хотя бы для начала вывести получающийся запрос на memo1

положи на форму memo1, и не выполняй запрос, а присваивай в memo1
...
// Prepared:= True;
// Execute;
memo1.Lines.Add(CommandText);

и посмотри ЧТО ПОЛУЧАЕТСЯ.

и передавай в запрос не абы что, а конкретно значения параметров, КАКИЕ ХОЧЕТСЯ присвоить.

Добавлено через 2 часа 12 минут
Семантический анализ этой хрени:
БЫЛО:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm2.Button1Click(Sender: TObject);
begin
with ADODataSet3 do
begin
  CommandText:= 'INSERT INTO med VALUES('
  + QuotedStr(Form2.DBGrid1.Columns[1].Field.AsString)
  +','+ IntToStr(Form2.DBGrid1.Columns[2].Field.AsInteger)
  +','+ IntToStr(Form2.DBGrid1.Columns[3].Field.AsInteger)+')';
  Prepared:= True;
  Execute;
end;
end
НАДО:

"где-то" вверху объявить глобальные переменные
три штуки
Delphi
1
2
med_n:String;
med_id_ed,med_id_cat: Integer;
какие-то манипуляции юзера приведут к тому, что после нажатия чего-то
эти переменные получат свои значения


типа
Delphi
1
2
3
4
5
6
7
8
med_n:=DBGrid1.Columns[1].Field.AsString;
med_n:='какая-то фигня';
 
med_id_ed:=Form2.DBGrid1.Columns[2].Field.AsInteger;
med_id_ed:=333;
 
med_id_cat:=Form2.DBGrid1.Columns[3].Field.AsInteger;
med_id_cat:=777;
...
нажатие магического батона запустит на выполнение скрипт, в который попадут значения этих переменных:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
Procedure TForm2.Button1Click(Sender: TObject);
begin
with ADOCommand1 do
begin
  CommandText:= 'INSERT INTO med VALUES('
  + QuotedStr(med_n)
  +','+ IntToStr(med_id_ed)
  +','+ IntToStr(med_id_cat)+')';
  Prepared:= True;
//  Execute;  // временно заблокируем, чтобы через memo1 убедиться, как формируется запрос
  memo1.Lines.Add(CommandText);
end;
end;
Потом копируем это чудо в память и выдавливаем в редакторе T-SQL в аксесе или на SQL SERVER и смотрим сработает или нет.

ЕСЛИ НЕ СРАБОТАЕТ, то проблема в интерфейсе между стулом и клавиатурой.
0
 Аватар для bootleanC
6 / 6 / 2
Регистрация: 28.04.2009
Сообщений: 106
26.10.2012, 11:22  [ТС]
сделал как ты сказал.выдает ошибку Project Project1.exe raised exception class EConvertError with messange "Флакон' is not a valid integer value'. Process stopped.Use Step or Run to continue.
"Флакон" это то что данные из второго столбца...ты написал что надо объявить перемеренные
Delphi
1
med_id_ed:=Form2.DBGrid1.Columns[2].Field.AsInteger;
инт а ведь в этом столбце стринг. не сам id записывается, а наименование
Delphi
1
2
3
4
5
  form2.DBLookupComboBox1.DataSource := Form2.DataSource3;
  form2.DBLookupComboBox1.DataField := 'n_ed';
  form2.DBLookupComboBox1.ListSource := Form2.DataSource1;
  form2.DBLookupComboBox1.KeyField := 'n_ed';
  form2.DBLookupComboBox1.ListField := 'n_ed';
SQL
1
2
3
CREATE TABLE ed (
id_ed INT PRIMARY KEY IDENTITY(1,1) NOT NULL,
n_ed VARCHAR(15));
0
71 / 71 / 7
Регистрация: 19.07.2011
Сообщений: 357
26.10.2012, 11:38
итак, по-порядку:

1 - удали нафиг свой проект до поры до времени.
2 - сделай ПРИМИТИВНЫЙ проект, состоящий из одной формы,
из одного грида для показа данных из одного ADODataSet1 из одного ADOCommand1, для того, чтобы данные в этой таблице менять/добавлять
3 - научись объявлять глобальные переменные
4 - научись передавать СТРОКОВОЙ переменной СТРОКОВОЕ значение, а не что бог на душу положит...
а переменной типа Integer - целочисленное значение
5 - научись выводить строку запроса к базе (Update statement) в memo1, чтобы анализировать ЧТО ЗА ХРЕНЬ У ТЕБЯ ПОЛУЧАЕТСЯ

потом будешь (вероятно сможешь) сложные супер проекты делать.
В пределах обсуждения топика НЕВОЗМОЖНО уместить начальный курс программирования.
0
 Аватар для bootleanC
6 / 6 / 2
Регистрация: 28.04.2009
Сообщений: 106
26.10.2012, 15:07  [ТС]
спасибо и на этом я уже понял что намудил по полной...уже создал новый проект добавляю все помаленьку вроде пока идет все норм...да и мне тут похожую курсовую скинули..буду анализировать
0
 Аватар для bootleanC
6 / 6 / 2
Регистрация: 28.04.2009
Сообщений: 106
28.10.2012, 19:18  [ТС]
решилась задача тем что создал много адодатасетов...

появился небольшой вопросик. суть в том что мне нужно изменить данные. делаю так
Delphi
1
2
3
4
  dm.adsMed.Edit;
  dm.adsMed.Post;
  dm.adsVisMed.Active :=False;
  dm.adsVisMed.Active :=True;
(dm - это дата модуль, изменяемая таблица загружена в adsMed. adsVisMed это дата сет для отображнии, именно он грузиться в дбгрид и имено на нем стоит курсор) но меняется первая строчка,хотя курсор стоит на какой нибудь другой. подскажите как дать указание компилятору чтобы менял нужную мне строку
0
71 / 71 / 7
Регистрация: 19.07.2011
Сообщений: 357
29.10.2012, 18:18
Для датасета нужен datasource, у datasource прописать требуемый код на OnChange.
Вообще, задача не понятная, что? зачем?
Сделай простой проект, хотя бы тестовый. У тебя все подсказки есть даже с кодами. Передай жестко зашитые значения переменных в параметры запроса и посмотри пишет он или нет в нужную таблицу.
Покажи(выложи) тут, в конце-концов ЭТОТ тестовый пример-проект.
0
 Аватар для bootleanC
6 / 6 / 2
Регистрация: 28.04.2009
Сообщений: 106
30.10.2012, 18:33  [ТС]
просто у меня как бы есть таблица "Поставка Медикамента" там содержится дата и id поставщика и получается что на определенную поставку соответствует много медикаментов...и мне надо сделать там чтобы я в одном дб гриде выбрал определенную дату поставки а во втором отобразились те медикаменты которые соответствуют этой поставки. связь происходит через id_spost который сравнивается в MasterFields предварительно выставив в адодатасете зависимого дбгрида в свойстве DataSourse ту тот дада соурс который по которому будет загружаться записи в зависимый Дбгрид.

это я сделал но вот возник вопрос...в режиме редактирования или добавления записей...я хочу добавить в определеную поставку медикамент и вот мне нужно узнать тот id по которому установлен курсор и добавить его в запрос добавление...
Delphi
1
dm.adsSpr.FieldByName('id_spost').AsInteger:=dm.adsVisSpost.***
***что надо прописать???
0
71 / 71 / 7
Регистрация: 19.07.2011
Сообщений: 357
30.10.2012, 21:22
вав-вав-вав, по-медленнее, плиз
Цитата Сообщение от bootleanC Посмотреть сообщение
просто у меня как бы есть таблица "Поставка Медикамента" там содержится дата и id поставщика и получается что на определенную поставку соответствует много медикаментов...и мне надо сделать там чтобы я в одном дб гриде выбрал определенную дату поставки а во втором отобразились те медикаменты которые соответствуют этой поставки. связь происходит через id_spost который сравнивается в MasterFields предварительно выставив в адодатасете зависимого дбгрида в свойстве DataSourse ту тот дада соурс который по которому будет загружаться записи в зависимый Дбгрид.
это я сделал но вот возник вопрос...в режиме редактирования или добавления записей...я хочу добавить в определеную поставку медикамент и вот мне нужно узнать тот id по которому установлен курсор и добавить его в запрос добавление...
Delphi
1
dm.adsSpr.FieldByName('id_spost').AsInteger:=dm.adsVisSpost.***
***что надо прописать???
1 - связь между таблицами работает?!
2 -
узнать тот id по которому установлен курсор
- для этого у datasource, отвечающего за список медикаментов, на OnChange поставить код присвоения заранее объявленной глобальной переменной (var myMedId :Integer; ) значения из этого датасета:
Delphi
1
myMedId:=dm.adsМоиМедикаменты.FieldValue['MyIdFieldName'];
а уж по кнопке "Добавить медикамент в поставку" в коде будет, примерно:
Delphi
1
dm.adsSpr.FieldByName('id_spost').AsInteger:=myMedId;
1
 Аватар для bootleanC
6 / 6 / 2
Регистрация: 28.04.2009
Сообщений: 106
20.11.2012, 10:08  [ТС]
zremas, слушай вот у меня другой вопрос...есть форма на ней два дб грида. в первой как бы покупка(ФИО покупателя, номер рецепта аптека где берет)[в первом гриде данные из таблицы pok] в другом гриде выводит список какие медикаменты от берет в эту покупку связь реализована через таблицу spi(список покупок) в которой указывается id(id_pok) нужной мне покупки id(Id_tov) товара которой покупается и количество. в таблицу spi надо заносить id товара из таблицы spr(справочник медикаментов), но пользователь выбирает товар из dbLookupComboBox который берет значения из таблицы med(таблица медикаментов). мне надо проверить если ли медикамент(id_med) в нужном количестве в таблице spr и если есть то добавить в таблицу spi idшник из таблицы spr(id_tov) с указаным значением(значения указывает пользователь на форме в Edit1.Text)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.11.2012, 10:08
Помогаю со студенческими работами здесь

После добавления значения в базу временная часть значения равна "00:00:00"
Прошу помощи. Имеется таблица, в которой есть поле InputDate . Написал контроллер для добавления данных в таблицу, но в таблицу попадает...

Добавлять в базу данных значения по id
Есть несколько файлов. Первый файл content_admin.php представляет собой форму для заполнения, которая в последующем передается в базу...

Не получается занести значения в базу
Привет всем. У меня есть скрипт вот он $result = array(); if (isset($_POST) &amp;&amp; is_array($_POST)) { $result = implode(',', $_POST); } ...

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru