Форум: "Базы";
Текущий архив: 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]Не за что ;)
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.03.18;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.005 c