Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по Delphi 2

Автор: yuish
Дата сообщения: 29.01.2007 14:50
Пишу различные проги на BDS2006 + SQLDIR+Девки, базы под MSAccess.
Все проги работают прекрасно начиная с 98 и до ХП.
Попробывал запустить из висты - если запрос идет к таблице - в прогах все отображается, а если к вьюхе - вылетает ошибка со ссылкой на kernel32.dll.
Может кто сталкивался с решением?

Кстати таже ошибка вылетает (в тех же местах) если экспортнуть акцесовскую базу из формата 2000-2003 акцесса под 2007 акцесс. В самом акцесе вьюхи открываются нормально.
Автор: ArtemiyUO
Дата сообщения: 30.01.2007 07:06
Видимо какие то несовместимости в драйверах доступа к БД. Сырая виста еще.
Автор: YFred
Дата сообщения: 30.01.2007 12:36
Написал сервис на Delphi, но переодически вылетает ошибка:

Не найдено описание для события с кодом ( 0 ) в источнике ( IntServ ). Возможно, на локальном компьютере нет нужных данных в реестре или файлов DLL сообщений для отображения сообщений удаленного компьютера. Попробуйте использовать ключ /AUXSOURCE= для получения этого описания, - дополнительные сведения об этом содержатся в справке. В записи события содержится следующая информация: Service failed on execute: Not Connected.

ХЗ что это значит, может кто знает. И еще вопрос как в Делфях происходит отладка проекта службы????
Автор: relictus
Дата сообщения: 31.01.2007 11:04
Кто работает/ал с EhLib - подскажите, что нужно сделать, чтобы наверху DBGridEh появилась строка для фильтрации с выпадающим списком? Просто строка фильтра появляется (но без вып.списка почему-то!) если св-во STFilter.Visible сделать true...
Автор: mainstream
Дата сообщения: 31.01.2007 13:32
Хочу сделать наследника TImage, который будет показывать вокруг себя рамку, если в данный момент в нем нет никагого изображения(что бы видно было где он находицо), ну и соответственно без рамки если в имадже есть изображение, или рамка может быть под изображением. Трабла в том что если в переопределенном Pain'те написать что-нибудь типа: Canvas.FrameRect(Rect(0,0,Width,Height)); то компонент начнет постоянно мерцать перерисовывая то рамку то картинку, как будто в цикле. Посоветуйте хотя бы в какую сторону смотреть. Заранее спасибо.
Автор: RostY
Дата сообщения: 31.01.2007 14:29
relictus
кажется, надо в пропертях колонки (TColumnEh) установить StFilter.DataField, KeyField ...
Автор: relictus
Дата сообщения: 31.01.2007 14:43

Цитата:
кажется, надо в пропертях колонки (TColumnEh) установить StFilter.DataField, KeyField ...

пробовал, не помогает
а хочу вот как на картинке http://i7.tinypic.com/2q9mi3p.jpg (что сейчас есть - красная стрелка на картинке), а нужно сделать так, как показано зеленой стрелкой (пример из DEMO).
Братцы помогайте, именно такую фильтрацию хочет клиент!

Добавлено:
Так, заполнение списка сделал (спасибо RostY, направил в нужное русло!). Оказывается надо в пропертях колонки (TColumnEh) установить сначала StFilter.ListSource, а затем только StFilter.ListField и StFilter.KeyField. Всеё, список появился, но теперь фильтрация не работает! Т.е. выражение фильтра нормально выбирается из списка, но дальше ничего не происходит. Что делать-то еще ??
Автор: FireZone
Дата сообщения: 31.01.2007 15:11
freedom83

Цитата:
1.как приаттачить файлы к письму по маске(*.txt) в указанной директории?
FindFirst - FindNext
Цитата:
2. письмо с одним аттачем создается, но его время при получении стоит текущее время +3,00. (кто виноват: программа или почтовый сервер)
Его время при получении стоит то же, что и при отправке. +3 - это часовой пояс отправителя.

Автор: RostY
Дата сообщения: 31.01.2007 16:14
relictus
еще посмотри в папке DataService - там есть юниты, один из котрых надо прописать в юзесах (читай readme.txt в той же папке). И еще попробуй в пропертях грида поставь StFilter.Local:=True;
Автор: vserd
Дата сообщения: 31.01.2007 17:44
relictus
И если хочешь автоматической сортировки/фильтрации ни вкоем случае не создавай обработчиков соответствующего действия. Иначе автоматика не работает.
И поставить /*FILTER*/ и Order By в отдельную строку в самое начало.
Автор: relictus
Дата сообщения: 01.02.2007 08:03
RostY

Цитата:
в папке DataService - там есть юниты,

Вай, как обидно - а для DBISAM там ничего-то нет!! А именно этот engine используется в проекте... Нет ли у кого доп. модуля к EhLib для DBISAM ?

Цитата:
поставить /*FILTER*/ и Order By в отдельную строку в самое начало

vserd
А можно по-подробнее насчет этого?
Автор: vserd
Дата сообщения: 01.02.2007 09:41
relictus
смотри ответ в http://forum.ru-board.com/topic.cgi?forum=33&topic=1838&start=100#lt
здесь это уже оффтопик.
Автор: OOD
Дата сообщения: 02.02.2007 22:32
Люди добрые помогите как вывести и отсортировать по времени в memo содержимое 2-х txt файлов?

допустим есть 2 файла 1.txt;2.txt Нужно выдернуть их содержимое и вставить в мемо , отсортировать по времени ...

содержимое файла 1.txt:

30.01.2007 2
01.02.2007 3

содержимое файла 2.txt:

01.01.1999 1
02.02.2007 4

как собрать этих 2 файла и отсортировать строки в файлах по времени указанном в начале каждой стоки?

собираю файлы так :

[more]
procedure TForm1.Button1Click(Sender: TObject);
var
sl: TStringList;
begin

sl := TStringList.Create;
try
sl.LoadFromFile('c:\1.txt');
Memo1.SetSelTextBuf(PChar(sl.Text));
sl.LoadFromFile('c:\2.txt');
Memo1.SetSelTextBuf(PChar(sl.Text));
finally
sl.Free;
end;
[/more]

но как теперь отсортировать ...



Автор: OdesitVadim
Дата сообщения: 02.02.2007 22:59
OOD
ужасно, просто ужасно добавляете второй файл. Ведь есть чудный метод AddStrings, который позволит добавить стоки в мемо с StringList.
А в общем, задача немного у вас не правильно поставлена. Нужно не загрузить, а потом с мемо сортировать, а чуточку наоборот, а именно: грузим в временное хранилище, там сортируем, а потом выводим в мемо. Это дело хорошо на классах сделать, но ...
код
[more]
type TMyRec=record
Date:TDate;
temp:integer;
var mass:array of TMyRec;

procedure AddFromFile(FileName:string);
var i,j,l,ol:integer;
sl:TstringList;
begin
sl:=TStringList.create;
try
sl.loadFromFile(Filename);
l:=sl.count;
ol:=Length(mass);
setlength(mass,l+ol);
for i:=ol to l-1 do
begin
j:=pos(' ',sl[i]);
mass[i].date:=StrtoDate(copy(sl[i],1,j-1));
mass[i].temp:=inttostr(copy(sl[i],j+1,maxint));
end;
finally
sl.free;
end;
end;

procedure sort;
var i,j:integer;
t:TMyRec;
begin
for i:=0 to length(mass)-2 do
for j:=i+1 to length(mass)-1 do
if mass[i].date>mass[j].date then
begin
t:=mass[i];
mass[i]:=mass[j];
mass[j]:=t;
end;
end;

procedure PrintToMemo(Memo:TMemo);
var i:integer;
begin
for i:=0 to length(mass)-1 do
memo.lines.add(DateToStr(mass[i].date)+' '+inttostr(mass[i].temp);
end;
[/more]
Код писан без проверки, так что не ручаюсь, что скомпилиться сразу
Автор: Amba911
Дата сообщения: 03.02.2007 21:04
Здравствуйте.
В общем, появилась у меня такая проблемка, есть DBFник который выгружается с некого софта, и вот при выгрузке в поле KOD записывается числовое значение и если оно меньше 8 символов, то спереди добавляются нули (к примеру: 00123456,00009876). Надо избавится от этих нулей. Я решил эту проблему таким способом:

for i:=1 to Table1.RecordCount do
begin
Table1.Edit;
k:=Table1.FieldByName('KOD').AsInteger;
Table1.FieldByName('KOD').AsInteger:=k;
Table1.Post;
Table1.Next;
end;

Нули убираются, но есть другая проблема при большом количестве записей обрабатывается очень долго (50 тыс. записей обрабатывает ~10 мин), процессор на 100% загружен, приложение висит, как ускорить процесс или уменьшить нагрузку на процессор, может есть другой способ избавится от нулей. Заранее огромное спасибо.
Автор: SERGE_BLIZNUK
Дата сообщения: 04.02.2007 09:26
Amba911
не ясно, чем вам так эти нули мешают... ;-)) Ну надо, значит - надо.

Цитата:
или уменьшить нагрузку на процессор
Если скорость обработки не критична, и чтобы приложение не "висело", просто вставьте в цикл:
application.ProcessMessages;

А вот для ускорения работы надо в корне менять принцип доступа к данным. Отказываться от DBE (я лично считаю, что это тупиковая ветвь развития - и кроме проблем BDE ничего не даёт... - на работе целый зоопарк чужого софта, используещего BDE :-(( )
Вариантов замены -очень много. И есть куча нюансов. Но обсуждение их здесь - оффтоп.
Поэтому про замену отвечаю вам в Вопросы по компонентам для Delphi, C++ Builder
удачи.
Автор: DroN_S
Дата сообщения: 04.02.2007 13:16

Цитата:
я лично считаю, что это тупиковая ветвь развития - и кроме проблем BDE ничего не даёт...

а вот это ты зря...
я раньше прекрасно работал с BDE и горя не знал...
у меня и сейчас есть продукт, который работает на BDE и с ним работают клиенты..
на счёт скорости обработки данных, естественно, BDE уступает другим СУБД, но использовать TTable в своих приложения - ВОТ ОСНОВНОЙ ТОРМАЗ!!! с любой СУБД нужно работать исключительно на SQL-запросах...
Автор: Amba911
Дата сообщения: 04.02.2007 14:57
Спасибо огромное проблема решилась отключил DataSource во время отработки цикла время уменьшилось до 30 сек (тоесть из-за отображения происходящего с таблицей на екране уходило так много времени на обработку).

application.ProcessMessages; работает отдельное спасибо.
Автор: OOD
Дата сообщения: 04.02.2007 17:36
люди добрые подскажите проблема такая, нужно удалять из memo строку в случае если эта строка повторяется.... Подскажите как это сделать
Автор: Jokerjar
Дата сообщения: 04.02.2007 17:42
Возможно, самый низкопроизводительный вариант... Короче, делаешь двойной цикл такой:

Код: for i := 0 to Memo1.Lines.Count - 1
for k := i to Memo1.Lines.Count - 1
...
Автор: A_V
Дата сообщения: 04.02.2007 20:09
OOD
i := 0;
while i < Memo1.Lines.Count do
begin
if Memo1.Lines.IndexOf(Memo1.Lines[i]) < i then
Memo1.Lines.Delete(i)
else
inc(i);
end;
Автор: ShamaN
Дата сообщения: 04.02.2007 20:56
Как в другой программе в TElTreeView выбрать следующий элемент?
Автор: whitewolfs
Дата сообщения: 07.02.2007 08:17
как проще прчитать строку из файла excel (известны координаты ячейки), без открытия этого файла в excel?
Автор: relictus
Дата сообщения: 07.02.2007 09:02
whitewolfs
Я юзаю компонент FlexCel (у него есть все для работы с xls через OLE или native доступ):
for i := 2 to FlexCelImport.MaxRow do
for j := 9 to 12 do // columns I,J,K,L from Excel
SG.Cells[i-2, j-9] := FlexCelImport.CellValue[i, j];
Автор: ShIvADeSt
Дата сообщения: 07.02.2007 09:06
whitewolfs
никак, в любом случае надо будет запускать ексель (правда не обязательно его отображать).
Автор: Vitus_Bering
Дата сообщения: 07.02.2007 09:10
whitewolfs
TXLSFile
_http://sm-software.com/pxlsfile.htm
Очень полезная библиотека, работает напрямую с экселевским файлом.
В копилке должна быть.
Автор: whitewolfs
Дата сообщения: 07.02.2007 09:27
Всем сенксза оперативные ответы! Счас буду пробовать. А еще нарыл про компонент F1book, - вроде тоже для работы с файлом напрямую. Кто нибудь пробовал его?
Автор: Vitus_Bering
Дата сообщения: 07.02.2007 11:04

Цитата:
в любом случае надо будет запускать ексель

Не надо запускать Ексель, более того, библиотека TXLSFile вообще не требует
установленного Екселя.
Автор: RostY
Дата сообщения: 07.02.2007 11:49
whitewolfs
F1Book пробовал когда-то. Но это ActiveX, так что с программой придется и его таскать. Тот Ф1бук, что идет с дельфой - старый и читает файлы только 95-го екселя. Если очень нужно, могу поделиться новым (вер. 6.1) с поддержкой новых фоматов.
Автор: Aaz68
Дата сообщения: 07.02.2007 11:56
Здравствуйте, проблема такая: установил у себя Delphi10 lite SP2, при попытке запустить какой-либо проект выдает ошибку "[Pascal Fatal Error] Project1.dpr(1): F1027 Unit not found: 'System.pas' or binary equivalents (.dcu)", даже если просто создал пустую форму. Дал дистрибутив приятелю, на его машине такая же байда. Дельфю качал отсюда: http://forum.ru-board.com/topic.cgi?forum=35&topic=30400#1. У кого- нибудь было такое?

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Событие STFilter(DBGridEh) ???


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.