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

» Вопросы по Delphi

Автор: Physician
Дата сообщения: 22.09.2005 20:31
zvyagaaa

Цитата:
Вопрос по базам данных Access. Из-за чего может возникать ошибка в ADOTable Типа "не удается найти строку для обновления. Некоторые значения могли быть изменены со времени ее последнего чтения" Кто-нибудь сталкивался с этим? Какие-нибудь есть идеи почему это может быть?

Не сталкивался, т.к. с Access не работал. Но предлагаю попробовать присвоить свойству LockType твоего DataSet значение ltPessimistic.
Автор: YurikGL
Дата сообщения: 22.09.2005 21:08
>Вопрос по базам данных Access. Из-за чего может возникать ошибка в ADOTable
>Типа "не удается найти строку для обновления. Некоторые значения могли быть
>изменены со времени ее последнего чтения" Кто-нибудь сталкивался с этим? Какие-
>нибудь есть идеи почему это может быть?

Как вариант - изменяешь SQL-коммандой набор данных, который в это время открыт в датасете. Потом, этот набор в датасете не обновляешь и пытаешься с ним работать.
Автор: AlexPetrovich
Дата сообщения: 23.09.2005 04:27
В Delphi есть компонент OLEcontainer при использовании которого можно "вставлять" различные OLE документы (типа Документ WordPad) в свое приложение.
А как в Delphi создать такой документ ? (Который потом можно будет вставить например в Word) ???
Автор: zvyagaaa
Дата сообщения: 23.09.2005 05:56
Спасибо, друзья за советы, я уже разобрался. Это был мой глюк. Т.к. проиндексировал таблицу по-тупому. Поэтому она и считалась только для одной строки. А потом сортировала с идиотическим алгоритмом, естественно, что она не могла найти строки.
Автор: SergeBS
Дата сообщения: 23.09.2005 11:09
AlexPetrovich
WordApp.Documents.Open('название_документа'); - открыть документ
WordApp.Documents.Add; - создать документ
Автор: DUMAND
Дата сообщения: 23.09.2005 16:46
SergeBS

Цитата:
Мой тебе совет: пока не поздно, пока много не наворотил, работая с текстовыми файлами, переходи на простенькую БД табличного типа. Все равно ведь когда-то захочешь статистику посмотреть, быстрый поиск поиметь и т.п. А с текстом такое - титанический ненужный труд.
Для перехода понадобится один раз сделать простенькую конвертилку Анкета-Dbf и обратно. И все.
Завтра возможно будет время - нашлепаю тебе образчик, как это может быть.

Буду весьма признателен. Я уже думал о создании какой-нибудь простейшей базы. А какое программное обеспечение мне потребуется?
Автор: YurikGL
Дата сообщения: 23.09.2005 19:07

Цитата:
В Delphi есть компонент OLEcontainer при использовании которого можно "вставлять" различные OLE документы (типа Документ WordPad) в свое приложение.
А как в Delphi создать такой документ ? (Который потом можно будет вставить например в Word) ???


Кладешь OleContainer на форму, по двойному клику его настраиваешь.
Далее, работаешь как с обычным Ole-сервером типа WordApplication.
Если не ошибаюсь OleContainer.oleobject....(далее свойства ole-сервера)

Перенести во внешний ворд можно через буфер или сохранить/загрузить через файл.
Второй путь предпочтительнее.


Цитата:
А какое программное обеспечение мне потребуется?

Можно взять связку Access+ADO. В подавляющем числе случаев не требует установки никакого дополнительного програмного обеспечения.
Автор: DUMAND
Дата сообщения: 23.09.2005 20:48
YurikGL
Что есть ADO? В Аксесе я лет пять назад делал простенькую базу.
Автор: YurikGL
Дата сообщения: 23.09.2005 20:57

Цитата:
Что есть ADO? В Аксесе я лет пять назад делал простенькую базу.

Создаешь в Access базу с требуемой структурой. В делфи кидаешь на форму ADOConnection и ADODataset-ы (вкладка ADO) и работаешь через них.
Для настройки ADOConnection делаешь на него двойной клик -> кнопка build -> выбираешь провайдером данных Microsoft Jet в "подключение" выбираешь нужный MDB-к.
Далее работаешь как с обычной базой даных.
Автор: Physician
Дата сообщения: 23.09.2005 23:09
Чтобы создать базу Access (.MDB), Access не нужен. С этой задачей отлично справляется Database Explorer (в составе Delphi 7) или Database Desktop (в Delphi 5).

из хелпа Database Explorer:

The Database Explorer is a hierarchical database browser with editing capabilities as described below. Each edition of INPRISE development tools (Delphi, C++Builder, Visual dBASE) ships with a different Database Explorer:

Tool Edition Explorer Name Notes
Автор: AlexPetrovich
Дата сообщения: 24.09.2005 01:35

Цитата:
Кладешь OleContainer на форму, по двойному клику его настраиваешь.
Далее, работаешь как с обычным Ole-сервером типа WordApplication.
Если не ошибаюсь OleContainer.oleobject....(далее свойства ole-сервера)

Перенести во внешний ворд можно через буфер или сохранить/загрузить через файл.
Второй путь предпочтительнее.

Это не совсем то, что мне было нужно...
Вообще задача выглядит так:
Есть чужое приложение, которое на главной форме содержит OLE Container и позволяет размещать в нем оформленные стандартным образом OLE документы. Таким "документом" может быть и форма другого приложения (получается типа плагина).
Как работать с Automation сервером (Word) я знаю, а как создать свой Embedeble объект, который будет всавляться в !любой! OLE Container .... вот это вопрос...
Автор: TheMan
Дата сообщения: 24.09.2005 16:48
Ребята, подскажите каким образом записать в бинарный файл смещение к записанному в него же бинарному блоку.

К примеру, смещение к блоку в десятичной системе 1000000 байт. Или $F4240. Как записать число $F4240 в бинарный файл в виде трех байт: 0F 42 40? Хочу чтобы программа прочла смещение и шла читать записанный по смещению блок.

Спасибо.
Автор: Physician
Дата сообщения: 25.09.2005 15:15
TheMan
А в какое место файла предполагается записывать само смещение? В самое начало, на определённом расстоянии от начала файла, в самый конец?
Автор: YurikGL
Дата сообщения: 25.09.2005 20:41

Цитата:
как создать свой Embedeble объект, который будет всавляться в !любой! OLE Container .... вот это вопрос...


Т.е. нужно создать OLE-сервер, который точно так же как Word смог бы быть вставлен в OLE-container?
Если да, то см
http://d-blokhin.narod.ru/files/readingroom/delphiandcom/index2.htm

http://www.delphikingdom.com/asp/answer.asp?IDAnswer=9791
Автор: Anotherone
Дата сообщения: 26.09.2005 13:00
Помогите, пожалуйста, запустить debugger, раньше все работало.
На прерываниях появляется крестик, CPU окно не активируется, а в логе пишет:


Thread Start: Thread ID: 3088. Process Project.exe (3300)
Process Start: D:\Projects\Project.exe. Base Address: $00400000. Process Project.exe (3300)
Module Load: Project.exe. Has Debug Info. Base Address: $00400000. Process Project.exe (3300)
Module Load: ntdll.dll. No Debug Info. Base Address: $7C900000. Process Project.exe (3300)
Module Load: KERNEL32.dll. No Debug Info. Base Address: $7C800000. Process Project.exe (3300)

Добавлено:
и так далее...

Delphi 2005 Architect for Windows, VCL Forms App, Windows XP, Integrated Debugging enabled.
Автор: vserd
Дата сообщения: 26.09.2005 14:57
Anotherone
Включи Debug information на вкладке Compiler в свойствах проекта
Автор: Anotherone
Дата сообщения: 26.09.2005 23:07
Спасибо за ответ, но не помогает.
Там все включено, кроме Use debud DCUs.
Жду рекомендаций.
Автор: Postscriptum
Дата сообщения: 28.09.2005 06:33
Поскажите, плиз. Ставлю компонент TBX package в Delphi 7. При компиляции tbx_d7.dpk выскакивает ошибка в модуле TBX.pas на строке
procedure GetPopupPosition(ParentView: TTBView; PopupWindow: TTBPopupWindow;
var PopupPositionRec: TTBPopupPositionRec); override;
TBX.pas(122): Undeclared identifier: 'TTBPopupPositionRec'
Подскажите, что за ошибка и как от нее избавиться?
Заранее сенкс.
Автор: PowerChute
Дата сообщения: 28.09.2005 06:43
Postscriptum
Описание TTBPopupPositionRec хранится в модуле TB2Item. Когда я искал эти компоненты, тоже были какие-то проблемы. Уже не помню. Кто-то мне скинул полностью работоспособные компоненты. Давай свое мыло в ПМ и я тебе вышлю.
Автор: Postscriptum
Дата сообщения: 28.09.2005 16:27
PowerChute
Отправил мыло в ПМ (если я все правильно сделал. Спасибо за помощь.
Автор: Larry
Дата сообщения: 02.10.2005 11:28
В своей программе я редактирую файл определенного драйвера (.sys). Проблема в том, что после внесения изменений в код драйвера, для корректной его работы, нужно править checksum. Возможно ли (и как) поправить контрольную сумму драйвера программно?

Заранее благодарен за ответ...
Автор: FAngel
Дата сообщения: 03.10.2005 06:51
Larry
Алгоритм вычисления контрольной суммы найти не сложно, сама сумма прописывается в заголовок драйвера. А проверка осуществляется самим драйвером или виндой ?
Автор: All Zh
Дата сообщения: 03.10.2005 08:52
Из своей программы мне надо 1)открыть 2)изменить 3)сохранить екзешник
притом изменённый файл больше по размеру исходного.
Дело в том, что я хочу зашифровать определённую функцию в своей программе.

Пожалуйста подскажите (желательно простенький пример) как это сделать.

Проблема ещё в том, что в зашифрованном виде она больше размером, как сделать, чтоб при записи она не перекрыла(перезаписала) другие функции?

Как найти в бинарном файле нужное место(по меткам)?


Заранее спасибо!
Автор: Larry
Дата сообщения: 04.10.2005 05:09
FAngel, проверка, по идее, должна виндой проходить. Когда правишь вручную файл с помощью программы HIEW, там же можно поправить контрольную сумму. А как программно - я не знаю. Навскидку, я не нашел, где в файле прописывается контрольная сумма.
Автор: FAngel
Дата сообщения: 04.10.2005 06:55
Larry
Вылезает ошибка защиты виндов ? Контрольная сумма хранится в PE заголовке, читаешь доки по структуре заголовка, найти контрольную сумму в нем - не проблема. [more=Часть PE заголовка ...]

Magic 0b 01 ; constant
MajorLinkerVersion 00 ; I'm version 0.0
MinorLinkerVersion 00 ;
SizeOfCode 20 00 00 00 ; 32 bytes of code
SizeOfInitializedData ?? ?? ?? ?? ; yet to find out
SizeOfUninitializedData 00 00 00 00 ; we don't have a BSS
AddressOfEntryPoint ?? ?? ?? ?? ; yet to find out
BaseOfCode ?? ?? ?? ?? ; yet to find out
BaseOfData ?? ?? ?? ?? ; yet to find out
ImageBase 00 00 10 00 ; 1 MB, chosen arbitrarily
SectionAlignment 20 00 00 00 ; 32-bytes-alignment
FileAlignment 20 00 00 00 ; 32-bytes-alignment
MajorOperatingSystemVersion 04 00 ; NT 4.0
MinorOperatingSystemVersion 00 00 ;
MajorImageVersion 00 00 ; version 0.0
MinorImageVersion 00 00 ;
MajorSubsystemVersion 04 00 ; Win32 4.0
MinorSubsystemVersion 00 00 ;
Win32VersionValue 00 00 00 00 ; unused?
SizeOfImage ?? ?? ?? ?? ; yet to find out
SizeOfHeaders ?? ?? ?? ?? ; yet to find out
CheckSum 00 00 00 00 ; not used for non-drivers
Subsystem 03 00 ; Win32 console
DllCharacteristics 00 00 ; unused (not a DLL)
SizeOfStackReserve 00 00 10 00 ; 1 MB stack
SizeOfStackCommit 00 10 00 00 ; 4 KB to start with
SizeOfHeapReserve 00 00 10 00 ; 1 MB heap
SizeOfHeapCommit 00 10 00 00 ; 4 KB to start with
LoaderFlags 00 00 00 00 ; unknown
NumberOfRvaAndSizes 10 00 00 00 ; constant

[/more]
Автор: gryzchik
Дата сообщения: 04.10.2005 07:07
Здравствуйте.

Подскажите,как можно при нажатии на кнопку сохранить данные 1 и 2 формы в виде экселя или ворда.На формах у меня edit'ы, label'ы и checbоx'ы.

Заранее спасибо!
Автор: Larry
Дата сообщения: 04.10.2005 08:49
FAngel, спасибо, буду пробовать.
Автор: imonah
Дата сообщения: 04.10.2005 14:11
gryzchik

Вот тебе кусок кода, который открывает Excel и занносит в него данные из СтрингГрида. Передалай по аналогии, все необходимые функции тут есть.

Код:
procedure TReleaseF.ExcelBtClick(Sender: TObject);
var
Workbook,Range,Cell1,Cell2,ArrayData:Variant;
// TemplateFile : String;
i,j:integer;
RowCount,ColCount:integer;
begin
// Координаты левого верхнего угла области,
//в которую будем выводить данные
if (ex<1) then begin BeginCol := 1; BeginRow := 1; end;
// Размеры выводимого массива данных
RowCount := SG_obl.RowCount;
ColCount := SG_obl.ColCount;
// Создание Excel
if (ex<1) then ExcelApp := CreateOleObject('Excel.Application');
// Отключаем реакцию Excel на события,
//чтобы ускорить вывод информации
ExcelApp.Application.EnableEvents := false;
// Создаем Книгу (Workbook)
// Если заполняем шаблон, то
// Workbook := ExcelApp.WorkBooks.Add('C:\MyTemplate.xls');
if (ex<1) then Workbook := ExcelApp.WorkBooks.Add
else Workbook:=ExcelApp.WorkBooks[1];
// Создаем Вариантный Массив,
//который заполним выходными данными
ArrayData := VarArrayCreate([1, RowCount, 1, ColCount], varVariant);
// Заполняем массив
for i:=1 to SG_obl.RowCount do
for j:=1 to SG_obl.ColCount do
ArrayData[i,j] := SG_obl.Cells[j-1,i-1];
// Левая верхняя ячейка области,
//в которую будем выводить данные
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;
ex:=ex+1;
BeginRow:=BeginRow+RowCount+1;
// ExcelBt.Enabled:=false;
end;
Автор: vserd
Дата сообщения: 04.10.2005 16:07
FAngel
А не подскажешь как можно определить размер SFX-части архива. Интересует можно-ли вычислить эту инфу по данным из PE части? И можно ли это сделать вообще? А то от прочтения этих хакерских сайтов, и описалок на них, в голове каша конкретная.
Автор: gryzchik
Дата сообщения: 04.10.2005 18:05
Спасибо, попробую.

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768

Предыдущая тема: Вероятность одинакового CRC32


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