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

» Вопросы по Delphi (до версии 2009) - часть 5

Автор: ZBEP
Дата сообщения: 24.01.2010 21:20
Пробовал, не помогло(
Автор: EugeneBoss3
Дата сообщения: 25.01.2010 05:23
Вопрос по компоненту TDbf v6.91.
Знатоки, подскажите, плиз, как решить проблему с отображением данных в таблице DBaseIII *.dbf с кодировкой OEM

Добавлено:
VadimLou

Цитата:
vkDBF

Поюзал компонент, глюки вылетают при использовании (типа "Исключительная ситуация EAccessViolation по адресу 00096026"), но OEM понимает
Может нечто подобное без глюков есть?
Автор: jonikDk
Дата сообщения: 25.01.2010 11:40

Цитата:
Может нечто подобное без глюков есть?

пользовался apolloTable проблем не было. OEM без проблем.
Автор: Ilya48
Дата сообщения: 26.01.2010 12:10
Приветствую всех.

Вопрос следующий: возможно ли включить в тело exe-файла какие-либо данные (например, текст) так, чтобы можно было их редактировать?

То есть чтобы не плодить рядом лежащих файлов (например, *.ini с настройками), а включить их в программу.

Заранее спасибо!
Автор: data man
Дата сообщения: 26.01.2010 12:25
Ilya48
Можно-то можно, но будут проблемы с антивирусами.
Один из возможных алгоритмов.
1. Данные хранить в ресурсах.
2. Читать данные, изменять их, записывать их в файл-копию программного файла.
3. По выходу из программы запускать батник, удаляющий старый файл программы и переименовывающий копию к прежнему имени.
Автор: V1s1ter
Дата сообщения: 26.01.2010 13:18
data man
Ilya48
Мне кажется Вы увлеклись, почему бы просто не дописывать данные в конец файла.
Пример применения Absolute Database - режим база данных в exe-файле.

Добавлено:
В догонку, а вот здесь Вы очень даже правильно обратили внимание.

Цитата:
Можно-то можно, но будут проблемы с антивирусами

Ilya48
Подумайте что лучше радои ini-файл или постоянный вопль, например Касперского, "AAA, программа изменилась!!!"

Автор: data man
Дата сообщения: 26.01.2010 13:38
V1s1ter
Цитата:
почему бы просто не дописывать данные в конец файла.


А я и написал
Цитата:
Один из возможных алгоритмов.


Теперь у Ilya48 есть выбор.
Автор: Ilya48
Дата сообщения: 26.01.2010 13:43
data man, V1s1ter, спасибо!

Цитата:
будут проблемы с антивирусами

Да, это я не подумал.

Жалко. Было бы удобно.
Автор: murkovich
Дата сообщения: 26.01.2010 22:04
Ilya48

Цитата:
Вопрос следующий: возможно ли включить в тело exe-файла какие-либо данные (например, текст) так, чтобы можно было их редактировать?

Цитата: Можно-то можно, но будут проблемы с антивирусами.
Автор: Ilya48
Дата сообщения: 26.01.2010 23:10
murkovich

Цитата:
Почему не делать "как у людей"?

Ну сам посуди - так есть один файлик, его легко кому-то дать, и файл с настройками не потеряется... Благодать!

Теперь по существу. Нашёл тут http://www.delphikingdom.com/asp/answer.asp?IDAnswer=41175 прямо готовый кусок кода, спасибо DRON'у. Рабочий, только что проверял.

Может, пригодится кому кроме меня.
Автор: EugeneBoss3
Дата сообщения: 27.01.2010 03:02
Подскажите, плиз, в чем разница SQLite и DISQLite?
Автор: SIgor33
Дата сообщения: 27.01.2010 09:51
Подскажите кто-нибудь на дельфи делал морфологический и синтаксический анализ.
если примеры с исходниками киньте
Автор: Odysseos
Дата сообщения: 27.01.2010 16:27
EugeneBoss3

И то, и другое - встраиваемые SQL-движки, но SQLite - много где используемый, писаный на "сях" (к примеру - FireFox версии >= 3.0 его использует для хранения истории и чего-то еще), есть компоненты для работы с ним из Delphi.

DISQLite же - самописный от http://yunqa.de, писаный на Delphi и ориентированный, очевидно, на использование под Delphi-софтом. Где используется - не знаю, не встречал.

...Или имелось в виду, какая между ними разница в возможностях?
Автор: delover
Дата сообщения: 27.01.2010 19:30
SIgor33
Для тех кому не лень иногда подумать RegExpr.
Слово морфология, яки синтакнтрический анализ лучше изучить по справочнику, программисты могут помочь с программированием.
Автор: VadimLou
Дата сообщения: 27.01.2010 22:09

Цитата:
SQLite
- dll таки на с. Бесплатно и многоплатформенно ...

Цитата:
DISQLite
- комбинация родного/выше (возможно с правками) в виде обьектников obj с обкруткой в виде компонент DataSet для Delphi. Не бесплатно ... Но есть альтернативные бесплатные обкрутки для Delphi.

Цитата:
DIRegExp
- аналогичная коммерческая обкрутка вокруг бесплатной с-шной либы PCRE... Аналогично существуют бесплатные обкрутки для Delphi.


Добавлено:
EugeneBoss3

Цитата:
vkDBF: EAccessViolation

Мой фиксеный вариант:
#
Автор: EugeneBoss3
Дата сообщения: 28.01.2010 06:56
VadimLou

Цитата:
Мой фиксеный вариант:

Спасибо за вариант, но только в Delphi 2007 при подключении к таблице данный компонент вешает IDE с ссобщением "Invalid pointer operation"
Привожу данные из Delphi
[more=Код юнита]
unit Main;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, VKDBFDataSet, ExtCtrls, RzPanel, RzDBNav, GridsEh, DBGridEh;

type
TForm1 = class(TForm)
DataSource1: TDataSource;
DBGridEh1: TDBGridEh;
RzDBNavigator1: TRzDBNavigator;
VKDBFNTX1: TVKDBFNTX;
VKDBFNTX1TBN: TIntegerField;
VKDBFNTX1FIO: TStringField;
VKDBFNTX1KOD_POST: TIntegerField;
VKDBFNTX1P_S: TIntegerField;
VKDBFNTX1KOD_BRIG: TStringField;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
with VKDBFNTX1 do
begin
if Active then Active:= False;
end;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
with VKDBFNTX1 do
begin
if not Active then Active:= True;
end;
end;

end.
[/more]

[more=Код ошибки]
[181A5EB2]{VKDBF.bpl } Vkdbfprx.TProxyStream.IsOpen + $2
[181C4AA5]{VKDBF.bpl } Vkdbfdataset.TVKSmartDBF + $139
[181CB792]{VKDBF.bpl } Vkdbfdataset.TVKSmartDBF.IsCursorOpen + $6
[203B149B]{dbrtl100.bpl} DB.TDataSet.UpdateBufferCount (Line 10187, "DB.pas" + 1) + $4
[203B0DB2]{dbrtl100.bpl} DB.TDataSet.RemoveDataSource (Line 9953, "DB.pas" + 4) + $2
[203AEBDD]{dbrtl100.bpl} DB.TDataSet.Destroy (Line 8998, "DB.pas" + 7) + $B
[181C4A88]{VKDBF.bpl } Vkdbfdataset.TVKSmartDBF + $11C
[181D6710]{VKDBF.bpl } Vkdbfdataset.TVKDBFNTX + $48
[2003F66B]{rtl100.bpl } Classes.TComponent.DestroyComponents (Line 10464, "common\Classes.pas" + 9) + $6
[2003F45F]{rtl100.bpl } Classes.TComponent.Destroy (Line 10366, "common\Classes.pas" + 8) + $2
[20139C7C]{vcl100.bpl } Controls.TControl.Destroy (Line 3624, "Controls.pas" + 17) + $7
[20006754]{rtl100.bpl } System.TObject.FreeInstance (Line 8813, "sys\system.pas" + 2) + $2
[20006B86]{rtl100.bpl } System.@ClassDestroy (Line 9513, "sys\system.pas" + 0) + $2
[20032878]{rtl100.bpl } Classes.TPersistent.Destroy (Line 3715, "common\Classes.pas" + 3) + $6
[2013E069]{vcl100.bpl } Controls.TWinControl.Destroy (Line 6060, "Controls.pas" + 27) + $7
[201578DC]{vcl100.bpl } Forms.TScrollingWinControl.Destroy (Line 2362, "Forms.pas" + 3) + $7
[20158A3D]{vcl100.bpl } Forms.TCustomForm.Destroy (Line 2937, "Forms.pas" + 14) + $A
[20158A58]{vcl100.bpl } Forms.TCustomForm.Destroy (Line 2939, "Forms.pas" + 16) + $9
[20D27404]{designide100.bpl} Proxies.DestroyHook (Line 283, "Proxies.pas" + 2) + $6
[2000679C]{rtl100.bpl } System.TObject.Free (Line 8832, "sys\system.pas" + 1) + $4
[21D99B0A]{delphivclide100.bpl} VCLFormDesigner.TVCLRootDesigner.FreeRoot (Line 508, "VCLFormDesigner.pas" + 0) + $2
[20D4B5BE]{designide100.bpl} ComponentDesigner.TComponentRoot.InternalDeinitializeDesigner (Line 4433, "ComponentDesigner.pas" + 26) + $B
[20D4B61A]{designide100.bpl} ComponentDesigner.TComponentRoot.InternalDeinitializeDesigner (Line 4440, "ComponentDesigner.pas" + 33) + $B
[20D4D955]{designide100.bpl} ComponentDesigner.TComponentRoot.Close (Line 5241, "ComponentDesigner.pas" + 4) + $5
[216AE574]{delphicoreide100.bpl} DelphiModule.TPascalCodeMgrModHandler.Destroyed (Line 635, "DelphiModule.pas" + 9) + $5
[20A60F05]{coreide100.bpl} DocModul.TCodeIDocModule.NotifyDestroyed (Line 2342, "DocModul.pas" + 2) + $5
[20D243CD]{designide100.bpl} ToolUtils.ForEach (Line 90, "ToolUtils.pas" + 5) + $F
[20A60E76]{coreide100.bpl} DocModul.TCodeIDocModule.NotifyDestruction (Line 2326, "DocModul.pas" + 2) + $B
[20A5DFAE]{coreide100.bpl} DocModul.TDocModule.BeforeDestruction (Line 956, "DocModul.pas" + 15) + $0
[20006BE5]{rtl100.bpl } System.@BeforeDestruction (Line 9548, "sys\system.pas" + 7) + $0
[2097C98A]{coreide100.bpl} SourceModule.TSourceModule.Destroy (Line 414, "SourceModule.pas" + 0) + $2
[2000679C]{rtl100.bpl } System.TObject.Free (Line 8832, "sys\system.pas" + 1) + $4
[20A5F048]{coreide100.bpl} DocModul.WalkDependencies (Line 1549, "DocModul.pas" + 9) + $2
[20A5F091]{coreide100.bpl} DocModul.TDocModule.WalkDependencies (Line 1558, "DocModul.pas" + 1) + $1
[20A5E210]{coreide100.bpl} DocModul.TDocModule.Close (Line 1050, "DocModul.pas" + 12) + $F
[209E3B57]{coreide100.bpl} ProjectModule.TBaseProject.BeforeDestruction (Line 912, "ProjectModule.pas" + 30) + $4
[21683FE5]{delphicoreide100.bpl} BaseDelphiProject.TBaseDelphiProject.BeforeDestruction (Line 1223, "BaseDelphiProject.pas" + 4) + $2
[20006BE5]{rtl100.bpl } System.@BeforeDestruction (Line 9548, "sys\system.pas" + 7) + $0
[216824AA]{delphicoreide100.bpl} BaseDelphiProject.TBaseDelphiProject.Destroy (Line 715, "BaseDelphiProject.pas" + 0) + $A
[2000679C]{rtl100.bpl } System.TObject.Free (Line 8832, "sys\system.pas" + 1) + $4
[209CD8E2]{coreide100.bpl} ProjectGroup.TProjectGroup.BeforeDestruction (Line 923, "ProjectGroup.pas" + 41) + $2
[20006BE5]{rtl100.bpl } System.@BeforeDestruction (Line 9548, "sys\system.pas" + 7) + $0
[209CD6A2]{coreide100.bpl} ProjectGroup.TProjectGroup.Destroy (Line 869, "ProjectGroup.pas" + 0) + $2
[2000679C]{rtl100.bpl } System.TObject.Free (Line 8832, "sys\system.pas" + 1) + $4
[209D3721]{coreide100.bpl} ProjectGroup.TProjectGroupWrapper.Close (Line 2516, "ProjectGroup.pas" + 0) + $5
[00414550]{bds.exe } AppMain.TAppBuilder.DestroyProjectGroup (Line 2163, "ui\AppMain.pas" + 22) + $9
[004146E6]{bds.exe } AppMain.TAppBuilder.CloseProjectGroup (Line 2182, "ui\AppMain.pas" + 7) + $35
[00415089]{bds.exe } AppMain.TAppBuilder.FileCloseAll (Line 2440, "ui\AppMain.pas" + 13) + $1A
[004150C0]{bds.exe } AppMain.TAppBuilder.UpdateCaptionNow (Line 2472, "ui\AppMain.pas" + 0) + $8
[20040113]{rtl100.bpl } Classes.TBasicAction.Execute (Line 11081, "common\Classes.pas" + 3) + $7
[20151321]{vcl100.bpl } ActnList.TContainedAction.Execute (Line 388, "ActnList.pas" + 1) + $2C
[20152084]{vcl100.bpl } ActnList.TCustomAction.Execute (Line 1000, "ActnList.pas" + 7) + $8
[2003FFDF]{rtl100.bpl } Classes.TBasicActionLink.Execute (Line 11010, "common\Classes.pas" + 2) + $7
[21328D19]{vclactnband100.bpl} ActnMenus.TCustomActionMenuBar.ExecAction (Line 976, "ActnMenus.pas" + 6) + $D
[2132A04F]{vclactnband100.bpl} ActnMenus.TCustomActionMenuBar.TrackMenu (Line 1542, "ActnMenus.pas" + 15) + $15
[2132A07F]{vclactnband100.bpl} ActnMenus.TCustomActionMenuBar.TrackMenu (Line 1547, "ActnMenus.pas" + 20) + $10
[2132D470]{vclactnband100.bpl} ActnMenus.TCustomActionMainMenuBar.TrackMenu (Line 3146, "ActnMenus.pas" + 3) + $3
[213288E5]{vclactnband100.bpl} ActnMenus.TCustomActionMenuBar.CMItemClicked (Line 878, "ActnMenus.pas" + 3) + $4
[2013C4F3]{vcl100.bpl } Controls.TControl.WndProc (Line 5146, "Controls.pas" + 83) + $6
[20140673]{vcl100.bpl } Controls.TWinControl.WndProc (Line 7304, "Controls.pas" + 111) + $6
[2132A13E]{vclactnband100.bpl} ActnMenus.TCustomActionMenuBar.WndProc (Line 1575, "ActnMenus.pas" + 23) + $4
[2013FD9C]{vcl100.bpl } Controls.TWinControl.MainWndProc (Line 7073, "Controls.pas" + 3) + $6
[20040DD4]{rtl100.bpl } Classes.StdWndProc (Line 11583, "common\Classes.pas" + 8) + $0
[2013760E]{vcl100.bpl } Controls.FindControl (Line 2104, "Controls.pas" + 6) + $9
[201625D0]{vcl100.bpl } Forms.TApplication.ProcessMessage (Line 8105, "Forms.pas" + 23) + $1
[2016260A]{vcl100.bpl } Forms.TApplication.HandleMessage (Line 8124, "Forms.pas" + 1) + $4
[201628FF]{vcl100.bpl } Forms.TApplication.Run (Line 8223, "Forms.pas" + 20) + $3
[00422976]{bds.exe } bds.bds (Line 195, "" + 7) + $7

[/more]
Возможно, я что-то не так делаю?
Автор: SIgor33
Дата сообщения: 28.01.2010 08:58
delover

Цитата:
Для тех кому не лень иногда подумать RegExpr.

Мне казалось что это компонент не подерживает словоформы и не дает возможность узнать где глагол, а где существительное в иминетельном падеже. А вопрос именно в этом -это есть морфологический анализ
Автор: VadimLou
Дата сообщения: 28.01.2010 22:19
EugeneBoss3
я юзаю TVKSmartDBF - динамически создаю в рантайме...
твой пример неполон без самого файла и dfm - выложи куда нить ...
>
кстати - компили пакеты с отключенной оптимизацией и включённым detailed map. положи map рядом с bpl - тогда в стеке ошибок будут номера строк и для vkDBF сорцов ...
Автор: EugeneBoss3
Дата сообщения: 29.01.2010 02:37
VadimLou
[more=Ссылка файла теста:]
http://ifolder.ru/16156264
[/more]
Автор: Man Without Face
Дата сообщения: 29.01.2010 09:06
Подскажите пож, как ИМЕННО в FastReport (v 4.8) отсортировать данные по определенному столбцу (по возрастанию напр.)? Спасибо.
Автор: jonikDk
Дата сообщения: 29.01.2010 09:33
Man Without Face
вообще есть специальная тема для FastReport Ссылка
ответил там
Автор: VadimLou
Дата сообщения: 29.01.2010 17:57
EugeneBoss3

Фикса:

[more]
VKDBFDataSet.pas

function TVKSmartDBF.IsCursorOpen: Boolean;
begin
Result := {+}Assigned(DBFHandler) and {+.} DBFHandler.IsOpen;
end;

[/more]
Автор: InSe0F
Дата сообщения: 29.01.2010 22:25
коллеги, подскажите куда копать
чесно говоря никогда не сталкивался с сетевыми задачами
а тут надо сделать монитор активности апача по 80 порту и mysql 3306 - т.е. просто работает/нет
мож компоненты какие есть
привык решать одну математику.. в компонентах дополнительных не шарю совсем...
Автор: InSe0F
Дата сообщения: 30.01.2010 01:07
нашел код по соксам на перле... может кто знает как это на делфи будет выглядеть?
[more]
# bool chechSocketIfRunning($port)
# Checks localhost for open port $port.
sub chechSocketIfRunning
{ my ($port) = @_;
local $SIG{__WARN__} = sub{}; # to avoid undef warning after send()
local *SOCK;
my $test = "This is the test string";
return
socket(SOCK, PF_INET, SOCK_STREAM, getprotobyname('tcp')) &&
connect(SOCK, pack_sockaddr_in($port, inet_aton("127.0.0.1"))) &&
send(SOCK, $test, 0) > length($test)-2; # or -3, or -4 etc.
}[/more]

Добавлено:
как вообще наименне "безболезненно" для системы можно промониторить локальные процессы?
Автор: Aleksandr N
Дата сообщения: 30.01.2010 09:32
Напомните список классов критических ошибок, таких как EAccessViolation.
Автор: greenpc
Дата сообщения: 30.01.2010 10:06
Aleksandr N

Код: except
    on e: Exception do ShowMessage(e.ClassName+' !!! '+e.Message);
end; // try/except
Автор: Aleksandr N
Дата сообщения: 30.01.2010 10:14
greenpc
Это понятно, я имел в виду именно список, а не отлов в определённом месте. Мне нужно отделить "полезные" исключения от "вредных".

Добавлено:

Цитата:
все зависит от установленных компонентов

И это понятно. В самой ИДЕ уже заложен изначальный список, таких как EAccessViolation.
Автор: greenpc
Дата сообщения: 30.01.2010 10:30
Aleksandr N
unit Classes;
примерно строка 97

Добавлено:
и unit SysUtils;
строка 226
(EAccessViolation = class(EExternal); строка 313)
ide D7
Автор: Aleksandr N
Дата сообщения: 30.01.2010 10:35
greenpc
Что-то мало. Нашел нечто:

Цитата:
Исключения таких типов как, например, EAccessViolation, EListError, EAbstractError, EArrayError, EAssertionFailed и многих других можно рассматривать как фатальные ошибки, а исключения остальных типов рассматривать как восстановимые ошибки.

Получается ещё есть.

Добавлено:

Цитата:
и unit SysUtils;
строка 226
ide D7

А это способы вызова.
Автор: greenpc
Дата сообщения: 30.01.2010 10:50
Aleksandr N

Цитата:
А это способы вызова

у меня там идет объявление класса Exception
а после до 354 строки как раз то что вы искали

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768

Предыдущая тема: Clipper 5


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