Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.18;
Скачать: [xml.tar.bz2];




Вниз

Помогите программеры!!!!!!! 


draculenok   (2002-02-18 13:29) [0]

Здравствуйте программеры!!!!
итак объясняю ситуацию мне необходимо сделать COMBOBOX который должен брать список из базы но без повторений.... но при этом чтобы я мог сам вручную вводить данные....
наподобие в експлорере куда инетовский адрес пишешь ... что то такое
очень надо помогите пожалуйста
заранее благодарен!!!!


--------------------------------------------------------------------------------



Digitman   (2002-02-18 14:27) [1]

подразумевается, что с DISTINCT-запросом к базе у тебя проблем нет ?



Сергей Иванов   (2002-02-18 16:21) [2]

Кроме того, в самом ComboBox можно запретить дублирование.
И как же ты хочешь сохранять в базу - хранимой процедурой, простым Post, UpdateQuery. Т.е. хотелось бы знать, каким образом ты работаешь с базой - локально, клиентом, трехзвенкой.



draculenok   (2002-02-19 06:58) [3]

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



skiph   (2002-02-19 07:35) [4]

Для инициализации значений ComboBox используй процедуру вроде:
procedure ComboRefresh;
Var i:byte;
begin
With Form1.Query1 do
begin
Form1.ComboBox1.Items.Clear;
First;
while not Eof do
begin
Form1.ComboBox1.Items.Add(FieldByName("Field1").AsString));
Next;
end;
end;
end;

Только не забывай вызывать процедуру когда надо.



draculenok   (2002-02-19 07:47) [5]

>skiph © это на заполнение а на счет самого comboboxa нет идей?



Сергей Иванов   (2002-02-19 14:21) [6]

Ну тогда будем считать, что комбо ты уже заполнил.
Далее - добавление новых / выбор значений из айтемов.
Основная идея - то что у комбо можно менять стиль - например csSimple или csDropDown. Приведу пример, как это делал я.
Навешиваешь на комбо события:OnKeyDown

procedure TGroup.ItemsComboKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
case key of
VK_RETURN : begin
if ItemsCombo.Style = csSimple then begin
ItemsCombo.Items.Add(ItemsCombo.Text);
Items.ItemsCombo.Items.Add(ItemsCombo.Text);
{это добавление
в базу} Items.WriteToTable(ItemsCombo.Text, "КГ");
end; {csSimple}
ItemsCombo.Style := csDropDown;
ItemsCombo.Visible := false; {скрываем его}
end;
VK_ESCAPE : begin
if ItemsCombo.Style<>csDropDown then begin
ItemsCombo.Style := csDropDown;
ItemsCombo.Text := "";
end;
ItemsCombo.Visible := false; {скрываем его}
end;
end;
end;

Навешиваешь на комбо события:OnKeyPress
Это немногомодифицированная процедура из хелпа

procedure ComboKeyPress(Sender: TObject; var Key: Char);
var
Found: boolean;
i, SelSt: Integer;
TmpStr, NewItem: string;
Rect :TRect;
Edit :TEdit;
begin
if key in ["а".."я"] then Dec(Key,32);
with (Sender as TComboBox) do begin
SelSt := SelStart;
if (Key = Chr(vk_Back)) and (SelLength <> 0) then
TmpStr := Copy(Text,1,SelStart)+Copy(Text,SelLength+SelStart+1,255)

else if Key = Chr(vk_Back) then {SelLength = 0}
TmpStr := Copy(Text,1,SelStart-1)+Copy(Text,SelStart+1,255)
else {Key in ["A".."Z", etc]}
TmpStr := Copy(Text,1,SelStart)+Key+Copy(Text,SelLength+SelStart+1,255);
if TmpStr = "" then Exit;

if (Key = Chr(vk_Back)) and (SelSt > 0) then Dec(SelSt)

else if Key <> Chr(vk_Back) then Inc(SelSt);
Key := #0; { indicate that key was handled }
if SelSt = 0 then
begin
Text:= "";
Exit;
end;

Found := False;
for i := 1 to Items.Count do
if Copy(Items[i-1],1,Length(TmpStr)) = TmpStr then
begin
Text := Items[i-1]; { update to the match that was found }
ItemIndex := i-1;
Found := True;
Break;
end;
if Found then { select the untyped end of the string }
begin
SelStart := SelSt;
SelLength := Length(Text)-SelSt;
end
else begin
Style := csSimple;
Text := TmpStr;
SelStart := SelSt;
end;
end;
end;



Сергей Иванов   (2002-02-19 14:24) [7]

В этом месте
...
{это добавление
в базу} Items.WriteToTable(ItemsCombo.Text, "КГ");
...
дописываешь чего-нибудь вроде
Table1.Append;
Table1.FieldByName("Name") := ItemsCombo.Text;
...
Table1.Post;

Справишься?



draculenok   (2002-02-19 14:32) [8]

Постараюсь...
почему при вводе код на событие onkeydown он пишет что
Itemscombo не правильно



MetallAdm   (2002-02-19 14:37) [9]

Я тебе в другом вопросе ответил но
повторяю !
q0.Open;
q0.First;
While (not Q0.Eof) do
begin
s1:=Q0.FieldByName("dnach").AsString;
s2:=Q0.FieldByName("dkon").AsString;
Q0.Next;
stt:=s1+" - "+s2;
Cb1.Items.Add(stt);
end;

думаю понятно !
воот ! просто ихорошо



Сергей Иванов   (2002-02-19 14:51) [10]

Это у меня в программе TComboBox имеет имя ItemsCombo;
а у тебя в программе оно будет называться так, как ты его назовешь.
Сам то не догадался?



draculenok   (2002-02-19 14:52) [11]

Сергей Иванов >>> все понял .... спасибо



draculenok   (2002-02-19 15:08) [12]

спасибо всем за помощь!!!!!!!!!!!!!!!

извините если что не так спрашивал...



Сергей Иванов   (2002-02-19 15:24) [13]

Не за что ;)




Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.18;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.74 MB
Время: 0.019 c
7-57537           Serg!                 2001-12-13 14:20  2002.03.18  
Подскажите плз каким образом можно узнать кол-во процессоров на компе и их загрузку


6-57480           Malder                2002-01-04 00:55  2002.03.18  
Странная ошибка в программе


1-57466           shane54               2002-03-02 19:46  2002.03.18  
Передача параметров в функцию


3-57295           Андре                 2002-02-18 17:33  2002.03.18  
Хранилище документов


6-57476           Egor111               2002-01-03 21:29  2002.03.18  
Socket