powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / вопрос по masterField.
23 сообщений из 23, страница 1 из 1
вопрос по masterField.
    #32121556
plankton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот тут такая проблема возникла... пишу в программе:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
If ListBox1.items[Listbox1.ItemIndex]='PIVO' then
  begin
   table2.Close;
   Table1.Close;
   Table1.TableName:=ListBox1.Items[ListBox1.ItemIndex];
   table2.MasterSource:=DataSource1;
   table2.TableName:='PALATKA';
   table2.MasterFields:='ID';
   Table1.Open;
   table2.Open;
  end
else
 begin
  table2.Close;
  Table1.Close;
  Table1.TableName:=ListBox1.Items[ListBox1.ItemIndex];
  table2.TableName:='PALATKA';
  table2.MasterFields:='ZAKUSKA';
  table1.Open;
  table2.Open;
 end;


и всё работает, но вот если я выбираю из списка таблицу PIVO, то в таблице TABLE2 показываются поля таблицы PALATKA, но не показываются данные которые должны быть. А если я выбираю любое другое название таблицы, то в TABLE2 показывается таблица PALATKA и данные соответствующие.
Мне так кажется что я что-то всё-таки забыл дописать или ошибка с MAsterField
подскажите плиз.
...
Рейтинг: 0 / 0
вопрос по masterField.
    #32121728
Фотография SmaLL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предъяви структуру базы
...
Рейтинг: 0 / 0
вопрос по masterField.
    #32121854
plankton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ты имеешь ввиду таблицы показать?
Вот:
Код: plaintext
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.
таблица PIVO
 ------------------------------
 
ID  |  Name  |  SrokGodnosti  |
 ------------------------------
 
 1    | Jiguli    |     1 . 1 . 02          |
 2    | kozel    |    2 . 3 . 02          |
 -----------------------------
 

Таблица Order
 --------------------------------
 
Zakuska |  Customer |  IdOrder | 
 --------------------------------
 
Korki      |  Vasj       |     1         |
Emelj     |    Kolj      |     2         |
 --------------------------------
 

Таблица Sklad
 --------------------------------
 
Zakuska |  PriceTov |  IdSklad | 
 --------------------------------
 
Korki      |   1000       |     1         |
Emelj     |    2000      |     2         |
 --------------------------------
 

Таблица Palatka
 ---------------------------------
 
Zakuska |  Prodavec |  IdPalatka |
 ---------------------------------
 
Korki      |  Lelik       |     1           |
Emelj     |   Bolik      |     2           |
 ---------------------------------
 


...
Рейтинг: 0 / 0
вопрос по masterField.
    #32122113
m_kus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А какие данные долны быть?
Ты связываешь таблицы PIVO и PALATKA - а в них нет ничего общего... Зачем такая связь?
...
Рейтинг: 0 / 0
вопрос по masterField.
    #32122121
Фотография SmaLL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Структура базы никуда не годится.
2. Как следствие п.1 - В таблице 'PALATKA' нет поля 'ID', по которому она должна связываться с мастер-полем 'ID' мастер-таблицы 'PIVO', поэтому и не работает.
...
Рейтинг: 0 / 0
вопрос по masterField.
    #32122135
oleg_e
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вроде все работает как надо

procedure TForm1.Button1Click(Sender: TObject);
begin
Table2.Close;
Table1.Close;
Table1.TableName:='PIVO';
Table2.MasterSource:=DataSource1;
Table2.TableName:='PALATKA';
Table2.MasterFields:='ID';
Table1.Open;
Table2.Open;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Table2.Close;
Table1.Close;
Table1.TableName:='ZAKUSKA';
Table2.MasterSource:=DataSource1;
Table2.MasterFields:='ZAKUSKA';
Table1.Open;
Table2.Open;
end;

Проверь структуру таблиц, связываеммые поля сделай первичными ключами.
...
Рейтинг: 0 / 0
вопрос по masterField.
    #32122495
plankton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну я ошибся в структуре тут.
вообещм в PALATKA и PIVO есть общие поля. и в таблице PIVO один столбец совпадает с PALATKA, но не совпадает больше ни с какой другой таблицей. Для этого я меняю MasterField.

но вот не работает.
...
Рейтинг: 0 / 0
вопрос по masterField.
    #32122498
plankton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2ALL: ребята а вот еще вопрос такой.
в БД у меня есть процедура и View. Как мне сделать так чтобы в Дельфях эти фишки срабатывали по нажатию на кнопку?
ну я повесил две кнопки на форму, а как сделать что бы это работало в принципе не знаю.
помогите плиз
...
Рейтинг: 0 / 0
вопрос по masterField.
    #32122614
Фотография SmaLL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для вызова процедуры - TStoredProc
View - это таже таблица, работаешь как с таблицей.
...
Рейтинг: 0 / 0
вопрос по masterField.
    #32122690
plankton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2SmaLL: то есть с VIEW я просто ставлю TableName:='View'?
...
Рейтинг: 0 / 0
вопрос по masterField.
    #32122808
Фотография SmaLL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если у тебя view так и называется VIEW, то да, используешь его вместо имени таблицы.
...
Рейтинг: 0 / 0
вопрос по masterField.
    #32123283
plankton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2SmaLL: блин, я что-то совсем ступил.. спрашиваю - хотя дельфя под рукой и протестить типа не судьба. Я всё сделал. всё ништяк работает... хотя View у меня называется не View, но всё равно он идёт как Table Name... И с процедурой тоже вроде разобрался, так что спасибо большое . :) Теперь пошёл с отчётами разбираться. :)
...
Рейтинг: 0 / 0
вопрос по masterField.
    #32123401
Фотография SmaLL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мир тебе
...
Рейтинг: 0 / 0
вопрос по masterField.
    #32124709
plankton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не могу что-то разобраться как работает StoreProc выкидывает всё время ошибку.
Не мог бы сказать как там правильно всё написать?
...
Рейтинг: 0 / 0
вопрос по masterField.
    #32124876
Фотография SmaLL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какую ошибку?
...
Рейтинг: 0 / 0
вопрос по masterField.
    #32125034
plankton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вообщем я делаю на форме отдельную Grind3, DataSource3, StoredProc1, и на кнопку хочу повесить выполнение процедуры под названием FORALL1.
В свойствах StoredProc1 ставлю databaseName
В DataSource3 ставлю DataSet: StoredProc1
В DBGrid3 ставлю DataSource: DataSource3...
И теперь как только ставлю StoredProc1 Active=True он выкидывает ошибку:
"Error creating cursor handle."
А мне ведь еще на этом Grid делать и View. Но View я повесил на другую кнопку и написал там так:

procedure TForm1.Button1Click(Sender: TObject);
begin
Table3.open;
end;

Но ведь если сначала нажмут на Процедуру, то у меня Table3 будет уже открыт... тогда еще надо добавить наверное такую фишку:
if table3.Active=true then begin table3.Close; table3.Open; end else

или нет?
...
Рейтинг: 0 / 0
вопрос по masterField.
    #32125060
oleg_e
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что вообще делает твоя SP?
Может она не возвращет набор данных?
В этом случае ее не надо привязывать к DBGrid, а вызывать надо StoredProc1.ExecProc.

Но ведь если сначала нажмут на Процедуру, то у меня Table3 будет уже открыт
Это почему?!
Ты может имел в виду: DBGrid будет содержать данные?

Узнай точно что за хранимая процедура, ее параметры и что она делает.
Опиши все компоненты TTable, TDataSource и TDBGrid.
...
Рейтинг: 0 / 0
вопрос по masterField.
    #32125079
plankton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да кстати. ты Прав. ведь StoreProc не привязан к Table.
Моя процедура возвращает значение MAXSUMM .

сейчас написал просто
DataSource3.DataSet:=StoredProc1;
StoredProc1.ExecProc;

ну запускаю. нажимаю на кнопку. всё без ошибок, но не выводит ни чего.

DataSource3 приходится присваивать потому что до этого на неё присвоина Table3.

Но разве не надо сначала StoredProc1 привести в Active:=true?
вот как только это меняю он пишет ошибку:
"Error creating cursor handle."
...
Рейтинг: 0 / 0
вопрос по masterField.
    #32125121
oleg_e
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если SP возвращает не набор данных, то надо делать что-то вроде:

Код: plaintext
1.
2.
3.
4.
   
   StoredProcedure1.ExecProc;
   MaxSumm:=StoredProcedure1.Params[ 0 ].AsInteger;
   ShowMessage('MaxSumm = '+IntToStr(MaxSumm));


Это все примерно! Детали зависят от процедуры.
Никаких DataSource и Active:= true, в твоем случае, не нужно!
Оставь свой Table3.DataSource = DataSource3 и не дергай.

StoredProcedure1.Active:= true нужно делать в случае, если твоя процедура возвращает не число или несколько чисел, а набор данных (набор - это результат выборки SELECT). Это все грубо говоря. Опять же - есть детали, нюансы... Если у тебя есть доступ к БД - узнай текст процедуры.
...
Рейтинг: 0 / 0
вопрос по masterField.
    #32125153
plankton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так он будет выводить сообщение. а мне надо чтобы он показал на DBGrid.
А процедура, правда это не та, но на неё тоже надо будет делать:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
CREATE PROCEDURE MAXDIG
RETURNS(SUMDIG integer)
 Declare variable k integer;
 declare variable i integer;
 Declare variable l integer;
Begin
SELECT SUM(TI.PRI) FROM TI WHERE (TI.IDR) LIKE '%rub%' AND (TI.SKI) BETWEEN  5  AND  10 
  INTO: k ;
 SELECT count(RE.IDR) FROM RE WHERE RE.DAY= 1 
  INTO: i ;
SELECT COUNT(STR.ID) FROM STR WHERE (STR.ZAR< 400 )
  INTO: l;
  SUMDIG=k+i+l;
 end

И вот надо чтобы по нажатию на кнопку в DBGrind показывался результат.
как это сделать?
...
Рейтинг: 0 / 0
вопрос по masterField.
    #32125451
oleg_e
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По моему - никак.
Надо менять процедуру так, чтобы она возвращала данные не через переменную а через выбор.

Вместо
SUMDIG=k+i+l;
попробуй что-то вроде
SELECT k+i+l

А что за СУБД?
...
Рейтинг: 0 / 0
вопрос по masterField.
    #32125466
plankton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
InterBase.
...
Рейтинг: 0 / 0
вопрос по masterField.
    #32125677
oleg_e
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В InterBase нельзя возврашать из хранимой процедуры набор данных!
(кажется)

Тебе обязательно число пихать в грид?
Если да, то можно обойти проблемму.
Например:
делаешь суррогатную таблицу с одним полем,

при нажатии на кнопку в хранимой процедуре ее обновляешь,

извлекаешь простым селектом в грид.
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / вопрос по masterField.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]