Тема
|
Отчаяно се нуждая от помощ
|
|
Автор | bavnia (Нерегистриран) |
Публикувано | 18.08.05 11:59 |
|
Аз съм напълно начинаещ във вашата област , но се опитвам да си направя програма свързана с бази данни.Въпроса ми е следния:Как мога всеки ред който получавам след определен select да го извеждам в отделно текстово поле така че да мога след това да го използвам като входен параметър на друга заявка?Използвах DBCtrlGrid там ги извеждам в отделни полета само че не мога да ги използвам за следваща заявка.
Благодаря ви предварително!
|
|
Тема
|
Re: Отчаяно се нуждая от помощ
[re: bavnia]
|
|
Автор | eмил (Нерегистриран) |
Публикувано | 18.08.05 12:40 |
|
Така както си го написал почти нищо не се разбира.
Коя е базата данни която ползваш? С какво се свързваш
към нея? БДЕ?
"Как мога всеки ред който получавам след определен select да го извеждам в отделно текстово поле..."
DBGrid не върши ли работа?
За да използваш резултатите от един селект за да съставиш
друг селект, не ти трябват визуални контроли. Получените
данни са в твоя DataSet, които ползваш (примерно TQuery).
Той си има методи FieldByName('my_field').AsЕдиКаквоСи
Всъщност моите отговори са от областта на телепатията :)
защото не е много ясно какво искаш - ако можеш опиши
по-ясно.
Освен това селест с данни от друг селект може да се направи
направо в базата като "обединиш" двата селекта в един
който да връща крайния резултат, който искаш.
|
|
Тема
|
Re: Отчаяно се нуждая от помощ
[re: eмил]
|
|
Автор | bavnia (Нерегистриран) |
Публикувано | 18.08.05 13:02 |
|
Приемам забележките и ще се опитам да се доуточня!
Базата ми е SQL с FireBird1.5.
За връзка използвам BDE.(поне само за него знам)
След select примерно ми излизат 5 номера тези пет номера мога да ги изкарам в DBGrid като колона но аз искам да се виждат в пет текстови полета примерно едно под друго но да са си самостоятелни.След това тези полета ги ползвам като входни параметри на пет други selecta (за сега това е което ми идва на ум за да мога да постигна целта си).А ги визуализирам защото трябва да се виждат.
|
|
Тема
|
Re: Отчаяно се нуждая от помощ
[re: bavnia]
|
|
Автор | eмил (Нерегистриран) |
Публикувано | 18.08.05 13:31 |
|
Значи имаш TQuery. За 5-те номера дето връща
селекта трябва да направиш цикъл по върнатите записи.
Нещо подобмо:
MyQuery.Open;
while not MyQuery.Eof do
begin
MyNumber:=MyQuery.FiledByName('MyField').AsInteger;
...
тук правиш нещо с този номер. примерно:
MySecondQuery.Params.ParamByName('MyParam').AsInteger:=MyNumber;
MySecondQuery.Open;
// тук правя нещо си с MySecondQuery ...
MyQuery.Next; //следващия номер
end;
А относно показването в отделни "текстови полета"
на екрана - първо предполагам, че имаш предвид TEdit?
Какво ще правиш ако са не 5 резултата, а 50? а 500?
На ако държиш да не е грид, а отделни полета
ще трябва динамично да създаваш Едити-те в необходимия
брой (според селекта) на формата. И да се погрижиш да могат
да се скролират ако са много.
ПП: не знам какво правиш, ама меко казано ми се
струва неправилно :)
|
|
Тема
|
Re: Отчаяно се нуждая от помощ
[re: bavnia]
|
|
Автор |
Desso_J (powermann) |
Публикувано | 18.08.05 14:02 |
|
Емо добре ти е казал, че за да формираш следваща заявка не е необходимо показването на информацията във контроли, но може би това ти трябва и по друга причина...
Как става това?
Ако от BDE използваш компонент TQuery или TTable ето ти начина (емо го е написал но аз ще съм по-подробен).
Нека резултата на твоя селект да е две полета - integer и string.
След успешното изпълнение на селекта (добре е да е в блок try ... except ... end, за да не гърми програмата при евентуални грешки) се използва следната конструкция:
Edit1.Text:=Query1.FieldByName('<Името на твоето поле, независимо от типа на полето>').AsString;
Ако ти трябва полето от тип integer като число използвай:
<променлива от тип integer>:=Query1.FieldByName('<Името на твоето поле>').AsInteger;
Може и така:
<променлива от тип integer>:=Query1.Fields[<Номер по ред на твоето поле>].AsInteger;
Успех!
|
|
|
Това с TEDIT-ите може да стане така: декларираш си в класа на формата един array of TEDIT:
TForm1 = Class(TForm)
... //deklaracii na razni obekti - TEDIT, DATASOURCE....
arrEdits : array of edit; //tova ot tebe
end;
var Form1 : TForm1;
implementation
procedure FormCreate(Sender : TObject);
var i : integer;
begin
SetLength(arrEdits, MyDataSet.recordCount-1);
for i := 1 to MyDataSet.recordCount do
begin
MyDataSet.RecNo := i;
arrEdits[i-1] := TEdit.Create(Self);
arrEdits[i-1].Name := 'EDIT'+inttostr(i);
arrEdits[i-1].Left := 5;
arrEdits[i-1].Top := 30*i+5; //za da se pozicionirat edin pod drug...
arrEdits[i-1].Text := MyDataSet.FieldByName('NESHTO_SI').asString;
end;
end;
Имай впредвид, че в даден момент edit-ите ще станат много и няма да се съберат в/у формата - ако има такава възможност, може да ги разположиш в/у един ScrollBox. Освен това, ако случайно ползваш IBEXPRESS-компоненти (от таб-а с компоненти INTERBASE) MyDataSet.recordCount може да не върне броя записи - там има малък бъг, по-добре в този случай използвай "while not MyDataSet.Eof do....", както беше написано по-горе по темата..
Дано съм помогнал!!!
|
|
|
Чудя се дали в случая не би било удобно да се използва DBCtrlGrid със съответните визуализиращи компоненти?
|
|
Тема
|
Re: Отчаяно се нуждая от помощ
[re: eмил]
|
|
Автор |
bavnia (непознат
) |
Публикувано | 19.08.05 14:52 |
|
Благодаря ви за съдействието.Аз така или иначе нищо не разбрах пак ама щом мислите че така трябва да стане ще се опитам да го разбера.Ще се мъча пак.
Благодаря ви пак.
|
|
|
Дава ми съобщение че FieldForm1.arrEdits not have corresponding component и не знам от какво може да е!
|
|
Тема
|
Re: Опит за още малко помощ
[re: bavnia]
|
|
Автор |
Formal (незнаещ) |
Публикувано | 02.09.05 11:20 |
|
Премести arrEdits от published (първата) в public секцията на формата.
|
|