![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Я совсем чайник, помогите, если не лень!
Вопрос такой. Есть таблица DBGrid, в ней есть поле c названиями, очень длинными, но имеющими одинаковое начало. Нужно, чтобы в поле TEdit вводились начальные буквы, а результаты в DBGrid выводились по мере заполнения поля TEdit. Если есть возможность - бросьте вариант кода, чтобы с чего-то начать. Заранее спасибо, надеюсь на понимание. |
|
#2
|
|||
|
|||
|
Там Zylex выкладывал подобное.
http://www.delphisources.ru/forum/showthread.php?t=4012 |
|
#3
|
|||
|
|||
|
Цитата:
Я это уже читал, но у меня задача чуть хитрее. Представьте, что в строке написано типа : Муниципальная школа искусств. А я ввожу в поле поиска по буквам : школа. И хочу, чтобы вывелись все строки, где есть слова с буквы Ш, затем ШК, и т.д.. Т.е. поиск не с первого символа, а с любого первого совпадения внутри строки. Может, слишком путано, но что-то такое хотелось бы. |
|
#4
|
|||
|
|||
|
По идее в этом коде
Код:
s:=edit1.text+'%';
with Query1 do begin
Close;
SQL.Clear;
SQL.Add('SELECT DISTINCT familia FROM Table');
SQL.Add('WHERE familia LIKE'+quotedstr(s));
SQL.Add('ORDER BY familia');
Open;
end; |
|
#5
|
|||
|
|||
|
Спасибо огромное, все работает. Осталось только понять, а что это было?
Видимо надо годика два отпахать. чтобы разобраться. |
|
#6
|
|||
|
|||
|
могу пояснить
![]() Код:
s:=edit1.text+'%'; // здесь устанавливается маска поиска, т.е. все начинающееся с текста и неважно чем продолжающееся
with Query1 do begin // работаем с query
Close; // закроем запрос, если вдруг он открыт
SQL.Clear; // очистим строки запроса
SQL.Add('SELECT DISTINCT familia FROM Table'); // добавляем строки, в переводе на человеческий (выбрать уникальные фамилии из таблички)
SQL.Add('WHERE familia LIKE'+quotedstr(s)); // (где фамилии похожи на строку маски в одинарных кавычках)
SQL.Add('ORDER BY familia');// (отсортировать по фамилии)
Open; // откроем запрос чтобы он выполнился
end;// хватит работать с query |
|
#7
|
|||
|
|||
|
Я пытаюсь разобраться с дельфи уже целых три дня.
Суть запроса я понял за исключением quotedstr(). Теперь буду знать, еще раз огромное спасибо. А если я обнаглею и спрошу, как мне все это хозяйство выгрузить в Excel? C Rave Report я в первом приближении разобрался, но надо в Excel. Читал на форумах, пока не понимаю. |
|
#8
|
|||
|
|||
|
можно и без rave
тема экспорт в эксель наверняка где то тут уже поднималась и не раз ну да ладно посмотри процедурку в ней из query беруться данные но и с табличками абсолютно тоже самое Код:
Procedure SendtoExcel(ShFile: String; Querys: TQuery);
Var
ExcelApp, Workbook, Range, Cell1, Cell2, ArrayData: Variant;
BeginCol, BeginRow, j: integer;
RowCount, ColCount: Integer;
Begin
BeginCol := 1;
BeginRow := 3;
// Размеры выводимого массива данных
RowCount := Querys.RecordCount;
ColCount := Querys.FieldDefs.Count;
// Создание Excel
ExcelApp := CreateOleObject('Excel.Application');
// Отключаем реакцию Excel на события, чтобы ускорить вывод информации
ExcelApp.Application.EnableEvents := false;
// Создаем Книгу (Workbook)
// Если заполняем шаблон, то
Workbook := ExcelApp.WorkBooks.Add(ShFile);
ArrayData := VarArrayCreate([1, RowCount, 1, ColCount], varVariant);
// Заполняем массив
Querys.DisableControls;
Querys.First;
While Not Querys.eof Do
Begin
For J := 1 To Querys.FieldDefs.Count Do
Begin
ArrayData[Querys.RecNo, J] :=
Querys.FieldbyName(Querys.FieldDefs.Items[j - 1].DisplayName).value;
End;
Querys.Next;
End;
Querys.EnableControls;
// Левая верхняя ячейка области, в которую будем выводить данные
Cell1 := WorkBook.WorkSheets[1].Cells[BeginRow, BeginCol];
// Правая нижняя ячейка области, в которую будем выводить данные
Cell2 := WorkBook.WorkSheets[1].Cells[BeginRow + RowCount - 1,
BeginCol + ColCount - 1];
// Область, в которую будем выводить данные
Range := WorkBook.WorkSheets[1].Range[Cell1, Cell2];
// А вот и сам вывод данных
// Намного быстрее поячеечного присвоения
Range.Value := ArrayData;
// Делаем Excel видимым
ExcelApp.Visible := True;
End; |
|
#9
|
|||
|
|||
|
Мне, кстати, и из запроса тоже надо. Спасибо, попытаюсь. Поячеечный видел, там очень много кода, здесь хоть логика видна.
|
|
#10
|
|||
|
|||
|
Идиотский вопрос. А что такое ComObj? Как его подключить?
|
|
#11
|
|||
|
|||
|
Цитата:
В uses вписать ComObj |
|
#12
|
|||
|
|||
|
Есть копонент, кажется XLSReadWriterII. Работает не через COM с файлами Экселя. Фактически, за исключением некоторых особенностей, аналогично работе с TStringGrid. Можно его попробовать использовать.
Кроме того, если требуется только вывод в Эксель, то можно сформиролвать csv-файл. Эксель с удовольствием понимает такие файлы, а его формирование проблем вообще не вызывает - это просто значения, разделенные запятыми (comma separated values). только надо не забывать закрывать в кавычки значения с запятыми и экранировать другие кавычки. |