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

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

Автор: ERO1
Дата сообщения: 13.04.2007 08:40


Цитата:
Запись можно сделать так:
1. Запускаете транзакцию
2. Вносите информацию в главную таблицу
3. Получаете значение первичного ключа строки внесенной в п.2
4. Вносите данные в подчиненную таблицу используя значение, полученное в п.3.
5. Подтверждаете транзакцию

Для работы с Firebird, а так же InterBase, удобно использовать компоненты FIBPlus (http://devrace.com). На сайте разработчика есть разные статьи, например "FIBPlus: Особенности механизма master-detail при работе с InterBase и Firebird".
И есть хорошая книга "Мир InterBase", в сети видел электронную версию.


Цитата:

1. При вставке записи в основную таблицу получаем ID записи.
2. Начинаем транзакцию
3. Вставляем запись в основную таблицу.
4. Для каждой записи из подчинной таблице нужно использовать как часть ключа ID из п1.
5. Фиксация или откат транзакции.

Как это все проектировать читайте либо книжку по проектированию БД, книжку по IB которые указал gpi, либо PDF от 6-й версии (totorial, Data definition да и другие тоже). В свое время я по ним учился (только тогда 4.х) был.


Сделал все как вы посоветовали н мне прога выдает ошибку.


Добавлено:
Не успел добавить.
создал таблицу ну основную и там конечно есть ID поля автоинкременант он создается через генератор и другие поля штук 6. А потом создал подчененую таблицу с полями ID, MAIN_ID и ещё полей 7 штук. Здесь MAIN_ID для связи с осн.таблицой на первой таблицы создал первычный ключ к полю ID на втором создал первычный ключ к полю ID и внещний ключ MAIN_ID (ID->MAIN_ID).
Открыл Дельфи в дата модуле положил Датабейс, транзакцию и два датасета (естественно для интербейса). В первом датасете в SelectSQL написал
select * from MAIN
генератор поля устоновил
ну апдейт поля сделал.
На втором датасете в SelectSQL написал
select * from KONTROL
where main_id=:id
генератор поля устоновил
ну апдейт поля сделал.
в onNEWRECORDE написал qrKontrol['main_id']:=qrMain['id'];
в датасорсе установил датасорс первого Датасета. Потом сделал астивным все элементы.
Делаю компеляцию проги все без ощибки.
В форме есть дбгрид у него там датасоре написан датасорс первого датасета. В гриде все показывает нормално, но когда делаю бравз грида то тогда вылитает это ошибка.
"Access violation at address 00000000. Read of address 00000000"
Что это означает?
Автор: vserd
Дата сообщения: 13.04.2007 09:44
ERO1

Цитата:
создал таблицу ну основную и там конечно есть ID поля автоинкременант он создается через генератор и другие поля штук 6.

Как заполняешь значение этого автоинкременант? В тригере или ручками?

Я делал так.
1. В DM создана процедурина которая получает значение от генератора.
2. В Master после INSERT заполняю значние генератора.
FieldByName('ID').asInteger := DM.GetNextOID;
В Detail так как у тебя.



Цитата:
Access violation at address 00000000. Read of address 00000000"

гдето есть NIL указатель. Трасируй.
Автор: GreatOne
Дата сообщения: 13.04.2007 10:26

Цитата:
GreatOne
У тебя выставлено свойство. Нужно в нем
Jet OLEDB:System database прописать твой файл рабочей группы.


Спасибо!
Автор: killerbeanjeka
Дата сообщения: 13.04.2007 10:41
У меня есть таблица следующего вида
-------------------------
- Дата - Статус -
-------------------------

как можно в зависимости от значения "статуса" (1,2,3...) закрашивать ячейку "Дата" в определённый цвет? Работаю с TcxGrid
Автор: GreatOne
Дата сообщения: 13.04.2007 10:47
Как можно в DBGrid занести значение типа гиперссылка программно?

Добавлено:
Народ подскажите плиз как узнать количество строк в DBGrid?
Автор: OdesitVadim
Дата сообщения: 13.04.2007 12:29
GreatOne

Цитата:
Народ подскажите плиз как узнать количество строк в DBGrid?

DBGrid это только средство отображения данных. Кол-во строк в нём равно кол-ву строк запроса. Тоесть нужно смотреть на того, кто даёт данные. если это Table, тогда Table1.RecordCount (кажеться так)
Автор: RedPromo
Дата сообщения: 13.04.2007 12:37
killerbeanjeka
Навесить на колонку Дата свойство CustomDrawCell
Вот примерный текст процедуры отрисовки

Цитата:

Var st: integer;
begin
if VarIsNull(Sender.DataController.GetValue(AViewInfo.GridRecord.Index, Индекс колонки Статус))=False then
st:= Sender.DataController.GetValue(AViewInfo.GridRecord.Index,Индекс колонки Статус);

ACanvas.Canvas.Brush.Style := bsSolid;
if st=1 then
ACanvas.Canvas.Brush.Color := $00F7EAD9
else
ACanvas.Canvas.Brush.Color := $0000E0D9;

ACanvas.Canvas.FillRect(AViewInfo.Bounds);
ADone:= True;

Автор: RostY
Дата сообщения: 13.04.2007 12:45
killerbeanjeka
с TcxGrid не работал, то в стандартном гриде что-то типа:

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if Column.Field.FieldName='Dat' then
if Table1.FieldByName('Status').AsInteger=1 then
DBGrid1.Canvas.Brush.Color:=clRed
else
DBGrid1.Canvas.Brush.Color:=DBGrid1.Color;

DBGrid1.DefaultDrawColumnCell(Rect,Datacol,Column,State);
end;
Автор: GreatOne
Дата сообщения: 13.04.2007 12:53
2OdesitVadim

Спасибо!


Добавлено:
Как можно отобразить гиперссылку или поле Memo в DBGrid, DBEdit?
Автор: RostY
Дата сообщения: 16.04.2007 11:10
GreatOne
поле Memo отображай не в DBEdit а в DBMemo. а насчет "отобразить гиперссылку" вопрос не очень понятен. Если тебе нужно чтоб при нажимании на DBEdit запускался URL сделай что-то типа:

ShellExecute(0, Nil, Pchar('http:\\forum.ru-board.com'), Nil, Nil, SW_NORMAL);
Автор: GreatOne
Дата сообщения: 17.04.2007 12:29
Как из TWebBrowser можно получить все ссылки на странице и текст этих ссылок?
Автор: Jokerjar
Дата сообщения: 17.04.2007 12:33
for k := 0 to Browser.OleObject.Document.Links.Length - 1 do
begin
inner := Browser.OleObject.Document.Links.Item(k).innerHTML;
href := Browser.OleObject.Document.Links.Item(k).href;
end;

inner - текст k-ой ссылки
href - сама ссылка
Автор: GreatOne
Дата сообщения: 17.04.2007 12:43
Jokerjar

Спасибо большое!

Добавлено:
А как сохранить страничку не загружая ее в TWebBrowser? Как такое реализовать?

Добавлено:
И как еще из дельфи-приложения заархивировать файл в формат винрар? Мож ссылки на статьи есть у кого нить?
Автор: OdesitVadim
Дата сообщения: 17.04.2007 18:09
GreatOne

Цитата:
А как сохранить страничку не загружая ее в TWebBrowser? Как такое реализовать?

idhttp

Цитата:
И как еще из дельфи-приложения заархивировать файл в формат винрар? Мож ссылки на статьи есть у кого нить?

Взять рар и передать ему параметры. Алгоритм рара не разрешается так просто воспроизводить. А вот распаковывать - используем unrar.dll. Статей на эту тему много
Автор: iogun
Дата сообщения: 17.04.2007 22:00
GreatOne
1.
function WinExec(lpCmdLine: LPCSTR; uCmdShow: UINT): UINT
2.
Сама комманда rar rar.exe a -o+ -r D:\backup\backup.rar
про параметры комм. строки рара можно почитать в справке, кстати очень много можно сделать.
3. Итого
вызываем из делфи
WinExec('каталог с раром\rar.exe a -o+ -r <имя архива>', SW_SHOW)
Автор: GreatOne
Дата сообщения: 18.04.2007 09:18
OdesitVadim

idhttp? Можешь подробней команду написать?
Автор: Mandor Sawall
Дата сообщения: 19.04.2007 09:05
GreatOne
IdHTTP - ето компонента из Indy. Конкретная реализация немножко различна в Indy 9 и Indy 10, так что смотри на примеры в пакете.
Автор: Dunkel1
Дата сообщения: 19.04.2007 19:53
Имеется эллипс(круг), который ограничен прямоугольником EllipseRect. Требуется заполнить множество S точками, которые принадлежат этому кругу(лежат внутри). Для этого использую следующий код:

Код:

TMyPoint = class
public
x: Integer;
y: Integer;
constructor Create(tX: Integer; tY: Integer);
end;
...
constructor TMyPoint.Create(tX: Integer; tY: Integer);
begin
x := tX; y := tY;
end;
...

S: DSet;
EllipseRect: TRect;
j,k: Integer;
Rgn: HRGN;
...

Rgn := CreateEllipticRgnIndirect(EllipseRect);
if Rgn <> 0 then
try
for j := EllipseRect.Top to EllipseRect.Bottom do
for k := EllipseRect.Left to EllipseRect.Right do
if PtInRegion(Rgn,j,k) then
S.add([TMyPoint.Create(j,k)]);

finally
DeleteObject(Rgn);
end;

Автор: OdesitVadim
Дата сообщения: 19.04.2007 22:48
GreatOne
s:=IdHTTP1.Get('http://www.site.ua');
Всё, в переменной s содержимое страницы
Автор: AndVGri
Дата сообщения: 20.04.2007 04:38
Dunkel1
Обычно координаты описываются в таком порядке x, y; где x- горизонтальная ось, y - вертикальная. У вас, по моему, всё с ног на голову;). Попробуйте так
if PtInRegion(Rgn,k,j) then
S.add([TMyPoint.Create(k,j)]);
Автор: GreatOne
Дата сообщения: 20.04.2007 09:08
OdesitVadim

Спасибо!
Автор: Dunkel1
Дата сообщения: 20.04.2007 13:13
AndVGri

Цитата:
Dunkel1
Обычно координаты описываются в таком порядке x, y; где x- горизонтальная ось, y - вертикальная. У вас, по моему, всё с ног на голову;). Попробуйте так
if PtInRegion(Rgn,k,j) then
S.add([TMyPoint.Create(k,j)]);


Да, только сегодня ночью заметил эту дурацкую ошибку, глаз замылился )))) Спасибо !!!

Автор: GreatOne
Дата сообщения: 20.04.2007 14:22
Люди!! Подскажите плиз как в документ MS Word2003 записать гиперссылку?
Автор: bytex
Дата сообщения: 20.04.2007 17:51
Всем привет,

Импортировал type library из tlb, создаю объект, вызываю метод, при запуске из под IDE, получаю исключение:
Project raised exception class EOleException with message 'Invalid access to memory location'

Если же запускать exe'шник ручками, т.е. не из под IDE, то ошибки не выдается и код отрабатывает нормально.

Кто нибудь сталкивался с такой ситуацией ? Хоть бы знать в какую сторону копать. Заранее благодарю.
Автор: jONES1979
Дата сообщения: 21.04.2007 14:45
bytex про твою ситуацию ничего не скажу, но аналогичное тоже происходило. Раз без IDE всеработало гладко, то я и забил.
Просто могу посоветовать на конкретно этом участке кода отключить реакцию на исключения. Это можно сдалать в advanced- настройках в диалоге breakpoints: отключить реакцию "Break" и включить "Ignore subsequent exceptions"
Автор: Seldon
Дата сообщения: 21.04.2007 18:49
несколько вопросов по Delphi2007 for win32
* Для чего нужна опция Tools>Options>Environment Options>Default Project ?
* В выпадающем меню Инспектора-объектов есть пункт "Revert to inherited". Как я понимаю, он должен возвращать изменённые мной свойства текущего компонента к их дефолтным значениям... Но он этого не делает. Я вообще не заметил каких либо действий с его стороны. Что не так?
* На странице Tools>Options>Environment Options>Environment Variables переопределяю переменные BDSUSERDIR и BDSPROJECTSDIR, но среда всё равно создаёт папку "%Мои документы%\RAD Studio\Projects" и предлагает её для сохранения новых проектов. Как побороть?
* В хелпе (ms-help://borland.bds5/devcommon/idetour_xml.html) написано следующее: "When you add a nonvisual component to a form, it is displayed in the component tray at the bottom of the Designer surface. The component tray lets you distinguish between visual and nonvisual components." Как я понимаю, невизуальные компоненты должны отображацца не на самой форме, я где-то вне неё. Но этого не происходит и опции, отвечающей за это, я не нашёл. Ктонить вкурсе про это?
Автор: jONES1979
Дата сообщения: 21.04.2007 20:11

Цитата:
* В выпадающем меню Инспектора-объектов есть пункт "Revert to inherited". Как я понимаю, он должен возвращать изменённые мной свойства текущего компонента к их дефолтным значениям... Но он этого не делает. Я вообще не заметил каких либо действий с его стороны. Что не так?

ты немного недопонял. Эта команда возвращает "св-ва тек.компонента" не к их дефолтным значениям, а к их значениям на форме-предке в случае использования такой фишки как visual inheritance. То есть когда у тебя в проекте есть форма-предок и от неё формы наследники. В наследнике ты можешь переопределить некоторые св-ва для компонента обявленного в предке, и с помощью "Revert to inherited" вернуть их к прежним значениям. [more]
кусок из хелпа:

If a form inherits design features and properties from another form, you can choose Revert To Inherited from the Form context menu to restore the form to its original state. For example, if a form inherits a certain button placement from another form and you then move the button, Revert To Inherited returns the button to its original position.[/more]

Автор: Seldon
Дата сообщения: 21.04.2007 21:13
jONES1979, спасибо, понял
Автор: GoldFire
Дата сообщения: 21.04.2007 21:40
прошу помочь с написаниями двух заданий в этом языке программирования:

1. Разработайте следующие классы и приложение, в котором создаются несколько экземпляров разработанных классов. Каждый класс должен содержать поля, характеризующие описываемый предмет. Инициализация этих полей может проводиться и в конструкторе, кроме того, должны быть методы, меняющие эти поля. Каждый раз при успешном создании очередного экземпляра класса должно выводиться соответствующее сообщение. Акции и их владельцы. Владелец имеет сведения об акциях, а в акциях фиксируется информация об их владельце

2. Придумайте и разработайте иерархию классов, основываясь на следующем предмете (список - см. ниже). В иерархии должно быть не менее трех уровней, должны переопределяться методы, должны быть использованы все модификаторы доступа (обоснованно). На каждом уровне иерархии (кроме первого) должно быть не менее двух классов. Кроме того, должен быть написан тестирующий класс (или метод), демонстрирующий все возможности Вашей иерархии. емкость
Автор: Seldon
Дата сообщения: 21.04.2007 22:32
ещё трабла (в дополнение к вышенаписанному): в предыдущих версиях в списке CodeCompletion обозначение типа элемента (proc, func, prop, var etc) писалось разными цветами в зависимости от этого самого типа. в 2007 они все пишуцца одним цветом - ориентировацца совершенно невозможно. кто знает как поправить?

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: 1С: Конвертация данных 2.0


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