![]() |
|
|
Регистрация | << Правила форума >> | 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). только надо не забывать закрывать в кавычки значения с запятыми и экранировать другие кавычки. |