![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
![]() Здравствуйте, пытаюсь реализовать заполнение Дерева из БД, все данные пока что заполняются из одной таблицы, для простоты заполнения и чтобы разобраться. Среда: Embarcadero RAD Studio 2010.
Таблица состоит из 3 столбцов: COD_FACULTETA, NAME_FACULTETA, ABBR_FACULTETA Привожу пример кода: Код:
procedure TForm1.FormActivate(Sender: TObject); var s: string; begin if FileExists(ExtractFileDir(ParamStr(0))+'\settings.txt') then begin AssignFile(f, ExtractFileDir(ParamStr(0))+'\settings.txt'); Reset(f); Read(f, s); CloseFile(f); end else s:= ExtractFileDir(ParamStr(0))+'\bd_d.fdb'; with dm1 do begin SQLConnection1.Connected:=false; SQLConnection1.Params.Clear; SQLConnection1.Params.Values['DataBase']:=s; SQLConnection1.Connected:=true; LoadTreeView1; end; // тут тупо настройка соединения с бд, если нет файла, то пытаться загрузить бд из папки end; procedure TForm1.LoadTreeview1; var i,k : integer; begin flag:=false; i:=0; TreeView1.Items.Clear; with dm1.q do begin Active:=false; SQL.Clear; SQL.Add('SELECT * FROM FACULTET ORDER BY COD_FACULTETA'); Active:=true; First; while not Eof do begin TreeView1.Items.Add(nil, FieldByName('NAME_FACULTETA').AsString);// тут обращение к бд работает with dm1 do begin q2.Active:=false; q2.SQl.Clear; q2.SQL.Add('SELECT * FROM FACULTET ORDER BY COD_FACULTETA WHERE NAME_FACULTETA='+ FieldByName( 'NAME_FACULTETA').AsString); // вот с этим запросом беда q2.Active:=true; q2.First; k:=0; while not dm1.q2.Eof do begin TreeView1.Items.AddChildObject(TreeView1.Items.Item[i], dm1.q2.FieldByName('NAME_FACULTETA').AsString, Pointer( dm1.q2.FieldByName('COD_FACULTETA').AsInteger)); //(это для примера опять идут факультеты, т.к. ничего в бд не заполнено) inc(k); end; i:=i+k+1; Next; end; // по идеи должно получаться так: //Факультет Вм //остальные факультеты //Факультет Ск //и т.д. end; end; flag:=true; end; ![]() Сильно не пинать, первый раз этим занимаюсь) |
#2
|
||||
|
||||
![]() Неверно формируете запрос:
SELECT * FROM FACULTET ORDER BY COD_FACULTETA WHERE NAME_FACULTETA= Сортировка не может стоять до ограничения - поменяйте местами. Примерно так: Код:
q2.SQL.Add('SELECT * FROM FACULTET WHERE NAME_FACULTETA='+ FieldByName('NAME_FACULTETA').AsString); q2.SQL.Add('ORDER BY COD_FACULTETA'); Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. Последний раз редактировалось Страдалецъ, 29.02.2012 в 12:01. |
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение: | ||
vivazz (29.02.2012)
|
#3
|
|||
|
|||
![]() Убрал вообще сортировку, все равно такая же ошибка, вернее вместо WHERE появилась буква Ф. Копирнул ваш код - все равно ошибка. Параметры NAME_FACULTETA : VARCHAR, кол-во символов 100, кодировка win1251
Последний раз редактировалось vivazz, 29.02.2012 в 12:21. |
#4
|
||||
|
||||
![]() Ну правильно, вы же строку хотие сравнить. Надо это учитывать, обрамлять ее в кавычки или передавать параметром. Вот два варианта:
Обрамление кавычками: Код:
q2.SQL.Add('SELECT * FROM FACULTET WHERE NAME_FACULTETA='''+ FieldByName('NAME_FACULTETA').AsString)+''''; q2.SQL.Add('ORDER BY COD_FACULTETA'); Код:
q2.SQL.Add('SELECT * FROM FACULTET WHERE NAME_FACULTETA=:Facultet'; q2.SQL.Add('ORDER BY COD_FACULTETA'); q2.SQL.ParamByName('Facultet').asString := FieldByName('NAME_FACULTETA').AsString; Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение: | ||
vivazz (01.03.2012)
|
#5
|
|||
|
|||
![]() Такс...я попробовал приведенный вами код. В двух примерах сообщает об ошибках:
Код:
q2.SQL.Add('SELECT * FROM FACULTET WHERE NAME_FACULTETA='''+ FieldByName('NAME_FACULTETA').AsString)+''''; q2.SQL.Add('ORDER BY COD_FACULTETA'); ![]() Код:
q2.SQL.Add('SELECT * FROM FACULTET WHERE NAME_FACULTETA=:Facultet'; q2.SQL.Add('ORDER BY COD_FACULTETA'); q2.SQL.ParamByName('Facultet').asString := FieldByName('NAME_FACULTETA').AsString; ![]() |
#6
|
||||
|
||||
![]() Цитата:
Google в помощь |
Этот пользователь сказал Спасибо Ildar-tsr за это полезное сообщение: | ||
vivazz (01.03.2012)
|