powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Передать положение курсора Tabla через объект?
21 сообщений из 21, страница 1 из 1
Передать положение курсора Tabla через объект?
    #32108163
RY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RY
Гость
Здорово всем! :)
Пытаюсь редактировать значение в гриде. Для этого создаю диалог, и в нем редактирую, через DBEdit'ы.
Загвоздка в том что курсор, в диалоге всегда прыгает на 1'ю запись.
Пробовал сделать так.
Создал новый модуль UnProg, в нем описал объект:

type
TMyRecSet=class(TObject)
constructor Create;
function GetCurRec:Integer;
procedure SetCurRec(Value:Integer);
property CurRec: Integer read GetCurRec write SetCurRec default 0;
end;

constructor TMyRecSet.Create;
begin
inherited Create;
end;

function TMyRecSet.GetCurRec:Integer;
begin
GetCurRec:=CurRec;
end;

procedure TMyRecSet.SetCurRec(Value:Integer);
begin
CurRec:=Value;
end;

Дальше делаю так.
Подключаю модуль, описываю переменную объектного типа MyRecSet.

В модуле формы с гридом пишу:

procedure TFormSprApplicants.ToolButton2Click(Sender: TObject);
begin
MyRecSet:=TMyRecSet.Create;
MyRecSet.CurRec:=DataMdlGlobus.ADOTblTenants.RecNo;
BttmDlgApplicant.ShowModal;
DataMdlGlobus.ADOTblTenants.Edit;
end;

Чтобы затем в модуле диалога сделать так:

procedure TBttmDlgApplicant.FormActivate(Sender: TObject);
begin
DataMdlGlobus.ADOTblTenants.MoveBy(MyRecSet.CurRec);
end;
Т.е. питаюсь присвоить нужный номер записи.

Выполнение проги останавливается сообщеним "Stacs overflow" (после некоторой паузы), с указанием на:

GetCurRec:=CurRec;

моего объекта.

Ума не приложу, в чем дело, вроде свойство описано правильно.
Может глюки с ADO?
Подскажите люди добрые!
...
Рейтинг: 0 / 0
Передать положение курсора Tabla через объект?
    #32108182
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос первый, а что, напрямую в гриде редактировать нельзя.
...
Рейтинг: 0 / 0
Передать положение курсора Tabla через объект?
    #32108187
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И второй: при чем тут указатели на запись? Что значит курсор, в диалоге всегда прыгает на 1'ю запись ? Как это? Может написал не то- вот и прыгает :)

Ты информации побольше - чего вообще нужно, как делаешь сейчас (без указателей) и т.п.

ЗЫ Пытаюсь редактировать значение в гриде. Для этого создаю диалог, и в нем редактирую, через DBEdit'ы.
Значения в гриде нельзя отредактировать - там их нет Они в датасете :)
...
Рейтинг: 0 / 0
Передать положение курсора Tabla через объект?
    #32108430
m_kus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Курсор прыгает на первую запись, например, когда происходт Refresh или таблица закрывается/открывается...
А stack overflow после паузы - при бесконечной рекурсии, например, когда одна процедура вызывает вторую, а вторая - первую, без дополнительных проверок. В этом случае надо заглянуть в окно Call Stack (вызываемое комбинацией Ctrl-Alt-S сразу после ошибки) и посмотреть, что запускается и в каком порядке...
Может быть у тебя на DataSet.OnDataChange стоит вызов Toolbutton2click, а на активации диалога - Refresh... Неявно, конечно, но чем чёрт не шутит?
...
Рейтинг: 0 / 0
Передать положение курсора Tabla через объект?
    #32108443
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To tygra

>Значения в гриде нельзя отредактировать - там их нет Они в датасете :)

Ты же прекрасно понял, что я хотел сказать. Ёрничать то за чем.
...
Рейтинг: 0 / 0
Передать положение курсора Tabla через объект?
    #32108477
RY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RY
Гость
To pkarklin.
Конечно ты прав что значения в DataSete, но ведь отображаются они в Gride.
Конечно можно редактировать и непосредственно DataSet через Grid (если уж на то пошло).
Но разве не удобнее создать диалог, в котором будет отображаться редактируемая запись из Grida (тобишь из DataSeta).
В DBEdit'ах этого диалога и будут видны все значения полей текущей записи, там их и редактировать.
Суть в том, что если в Gride я хочу редактировать запись под номером 3, то после генерации диалога, в его DBEdit'ах отображаются значения полей записи номер 1. Как синхронизировать, чтобы при генерации диалога отображались поля 3 записи?
...
Рейтинг: 0 / 0
Передать положение курсора Tabla через объект?
    #32108511
LexusR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если DBEdit-ы прицеплены к тому же DataSet-у что и DBGrid
то значения в них всегда синхронизированно с курсором в DBGRid
а если они имеют собственный DataSet то имеете-то что имеете.
Если избежать двух DataSet-ов никак нельзя
то после открытия редактируемого DataSet-необходимо
его спозиционировать по значению ключевого поля текущей записи
DBGrid-а методом TDataSet.Locate(Field,Value)
...
Рейтинг: 0 / 0
Передать положение курсора Tabla через объект?
    #32108526
LexusR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
type 
TMyRecSet=class(TObject) 
constructor Create; 
function GetCurRec:Integer; 
procedure SetCurRec(Value:Integer); 
property CurRec: Integer read GetCurRec write SetCurRec default  0 ; 
end; 

constructor TMyRecSet.Create; 
begin 
inherited Create; 
end; 

function TMyRecSet.GetCurRec:Integer; 
begin 
GetCurRec:=CurRec; // Вот здесь у тебя и циклится
// метод чтения свойства НИКОГДА НЕ ДОЛЖЕН ОБРАЩАТЬСЯ К ЭТОМУ ЖЕ СВОЙСТВУ

end; 

procedure TMyRecSet.SetCurRec(Value:Integer); 
begin 
CurRec:=Value; //
end; 


Данный класс должен быть написан так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
TMyRecSet=class(TObject) 
  FCurrRec : integer
private
  function GetCurRec :Integer; 
  procedure SetCurRec(Value:Integer); 
public
  constructor Create; 
property CurRec: Integer read GetCurRec write SetCurRec default  0 ; 
end; 

constructor TMyRecSet.Create; 
begin 
  inherited Create; 
end; 

function TMyRecSet.GetCurRec:Integer; 
begin 
GetCurRec:=FCurRec;
end; 

procedure TMyRecSet.SetCurRec(Value:Integer); 
begin 
  FCurRec:=Value; 
end; 

...
Рейтинг: 0 / 0
Передать положение курсора Tabla через объект?
    #32108529
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 pkarklin
Так я не тебе же :)

2 RY
Так покажи код, как ты вызываешь диалог. Если не делать ненужных вещей, запись остается на том же месте.
...
Рейтинг: 0 / 0
Передать положение курсора Tabla через объект?
    #32108553
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Конечно можно редактировать и непосредственно DataSet через Grid (если уж на то пошло).

Не моно, а нуно. А так ты себе лишний геморой второй день имеешь. Что в гриде нельзя сделать, чего ты сделал через отдельные dbaware контролы?
...
Рейтинг: 0 / 0
Передать положение курсора Tabla через объект?
    #32108568
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я вот практически не использую редактирование через грид - неудобно это.
Открываешь форму - все сразу видишь. И все справочники нормально разместить можно, и поля, а так, в гриде - пальцы поломаешь. А если форма еще и немодальная - вообще прекрасно.
...
Рейтинг: 0 / 0
Передать положение курсора Tabla через объект?
    #32108580
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Я вот практически не использую редактирование через грид - неудобно это

Конечно, не все удобно редактировать через грид.

>И все справочники нормально разместить можно, и поля,

Что значит разместить справочники нормально. Что вообще в твоем понятии справочник. Если ты про дополнительную форму выбора из справочника, то на что тебе кнопка с тремя точками.
...
Рейтинг: 0 / 0
Передать положение курсора Tabla через объект?
    #32108590
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Справочники - DBLookupConboBoxEh - где и как нужно, так и поставил. Да и все компоненты так.
...
Рейтинг: 0 / 0
Передать положение курсора Tabla через объект?
    #32108600
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я под справочником представляю дополнительную форму выбора с вожможность поиска по образцу по нескольким критериям, например, выбор из справочника продукции, товаров и услуг, содержащего более 70000 позиций. В DBLookupConboBoxEh его не запихнешь. не гнать же все 70000 записей на клиента. Но все равно, функциональность DBLookupConboBoxEh также реализуема в ячейки грида, если этот грид из EhLib.
...
Рейтинг: 0 / 0
Передать положение курсора Tabla через объект?
    #32108643
RY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RY
Гость
To pkarklin

>Так покажи код, как ты вызываешь диалог. Если не делать ненужных вещей, запись остается на том же месте.

Код есть выше, но повторю еще раз:

procedure TFormSprApplicants.ToolButton2Click(Sender: TObject);
begin
MyRecSet:=TMyRecSet.Create;
MyRecSet.CurRec:=DataMdlGlobus.ADOTblTenants.RecNo;
BttmDlgApplicant.ShowModal;
DataMdlGlobus.ADOTblTenants.Edit;
end;

В диалоге:
procedure TBttmDlgApplicant.FormActivate(Sender: TObject);
begin
DataMdlGlobus.ADOTblTenants.MoveBy(MyRecSet.CurRec);
end;

Я согласен с тем что редактировать через грид менее удобно чем через диалог.

А вот Grid и DBEdit'ы в диалоге, настроены на разные DataSours'ы.
Для Grid'а это ADOStoredProc, а для DBEdit'ов это непосредственно Table.
Хотя Процедура выполняет выботку по этой таблице.
...
Рейтинг: 0 / 0
Передать положение курсора Tabla через объект?
    #32108648
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот Grid и DBEdit'ы в диалоге, настроены на разные DataSours'ы.
Для Grid'а это ADOStoredProc, а для DBEdit'ов это непосредственно Table.
Хотя Процедура выполняет выботку по этой таблице.


О ужас - ты зачем Table то используешь? А если 10000 записей, так все время и такаешь их? Ты уж лучше сохраняй через хранимые процедуры. Да и криво как-то сделано.

А код то покажи без указателей - нафиг они не нужны.
...
Рейтинг: 0 / 0
Передать положение курсора Tabla через объект?
    #32108730
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To RY
To pkarklin

>Так покажи код, как ты вызываешь диалог. Если не делать ненужных вещей, запись остается на том же месте.

Код есть выше, но повторю еще раз:


А я и не просил тебя код показывать. Это был tygrа.

И вообще я не вижу, где здесь нужно писать код, для выполнения элементарных задач редактирования набора.
...
Рейтинг: 0 / 0
Передать положение курсора Tabla через объект?
    #32108840
RY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RY
Гость
To tygra

Table пользую для добавления записей и редактирования записей, в Accesse это нельзя сделать с помощью процедур.
...
Рейтинг: 0 / 0
Передать положение курсора Tabla через объект?
    #32108844
RY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RY
Гость
To LexusR

Спасибо за совет, исправил свойство как ты сказал, на стэк ругаться перестал, но все равно выскакивает ошибка "access violation", и останавливается на том же самом месте.
...
Рейтинг: 0 / 0
Передать положение курсора Tabla через объект?
    #32108860
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну дык можно вызвать update?

И не надо никаких указателей, что за фигня, блин.

Просто же: передаешь в диалог ID (или какой там ключ уникальный у тебя) нужной записи и либо в TTable говоришь Locate('ID', Value, []) - вот она, твоя запись, либо select * from Table where ID = IDValue. - тоже вот она. Но одна.

Тяжело руками поставить нужную запись текущей? Лучше огороды горолдить чтоли?
...
Рейтинг: 0 / 0
Передать положение курсора Tabla через объект?
    #32109121
LexusR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насчет целесообразности создания объекта для хранения только одной интовой
переменной согласен с tygr-ой - это абсолютно бессмысленно
а чисто теоретически :
(тут я лажанулся - переписал у тебя :) )
Код: plaintext
1.
2.
3.
4.
5.
6.
function TMyRecSet.GetCurRec:Integer; 
begin 
// GetCurRec:=FCurRec; - это бред
// нужно так
  Result := FCurRec;
end; 
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Передать положение курсора Tabla через объект?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]