|  | 
 
 | 
| 
 | |||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны | 
|  | 
|  | Опции темы | Поиск в этой теме | Опции просмотра | 
|  | 
| 
			 
			#1  
			
			
			
			
		 | |||
| 
 | |||
|  Treeview из БД что не так? Здравствуйте, пытаюсь реализовать заполнение Дерева из БД, все данные пока что заполняются из одной таблицы, для простоты заполнения и чтобы разобраться. Среда: 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  
			
			
			
			
		 | ||||
| 
 | ||||
|   Цитата: 
 | 
| Этот пользователь сказал Спасибо Ildar-tsr за это полезное сообщение: | ||
|  
vivazz (01.03.2012)
 | ||