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

» Использование DevExpress 2

Автор: X11
Дата сообщения: 10.09.2007 08:59
по идее это всё делается так:
подключаем оба датасета к одной транзакции, если исп. FIB+, то autocommit отключи, в мастере добавляем запись, вот у нас и есть значение id, но в базу-то оно не записалось , этот id подставляем в деталь и если всё нормально, то подтверждаем транзакцию и cxGrid тут не причем
Автор: clear2121
Дата сообщения: 10.09.2007 09:16
X11
Я использую ADS (локальные базы данных). В нем использую Query. Поэтому транзакций нет
Смотрю в сторону TdxMemData. Но что то не понимаю как это работает.
Автор: X11
Дата сообщения: 10.09.2007 09:24
с пом cxGrid`а ты такое не провернёшь, т.к. id записи (автоинкрементного поля) отдает база, а не грид, по крайней мере для корректной работы в базе нужно брать (в таблице)
Автор: clear2121
Дата сообщения: 10.09.2007 09:44
Так мне и не нужно этого до тех пор, пока я не сохраню в главную. Можно в cxGrid добавить записи напрямую?
Автор: X11
Дата сообщения: 10.09.2007 10:16

Цитата:
Можно в cxGrid добавить записи напрямую?

не понятно, что ты под "напрямую" подразумеваешь? Встречный вопрос, как это "НЕ напрямую"??
Автор: clear2121
Дата сообщения: 10.09.2007 10:33
Минуя всякие ДатаСеты.
Ведь для Грида нужно указать какой ДатаСоурс подключить. Я думаю, он их копирует в свой соурс и потом показывает. А если в его соурс напрямую пихать? Можно?
Грид->Что то еще->... = Мое значение. А потом через КВЕРИ все запихать в базу
Автор: X11
Дата сообщения: 10.09.2007 10:39
У EhLib есть стандартный встроенный диалог поиска, который можно вызвать с пом Ctrl+f или с помощью Ctrl+F+F, поивился ли такой диалог и девок, если да, то как его вызвать?
Автор: clear2121
Дата сообщения: 10.09.2007 10:41
Читаю про TdxMemData. На сколько я понял - это виртуальная таблица, в которой самому можно создать поля. Не подскажите как? Это был бы выход
Автор: Jack4
Дата сообщения: 10.09.2007 11:56
Приветы!

Есть VerticalGrid в нем ImageComboBox (без картинок), почему не работает:

TextEdit := IntToStr(TcxImageComboBox(VGrid_Row.Properties.EditProperties).ItemIndex);

и попутно, как достать Value текущей строки в ImageComboBox???

Если не захотите отвечать, то "пошлите" меня по ссылочке, где расписано как осуществлять доступ к свойствам In-Place эдиторов, а то я совсем ПЕРЕПУГАЛСЯ!
Автор: X11
Дата сообщения: 10.09.2007 12:06

Цитата:
Читаю про TdxMemData. На сколько я понял - это виртуальная таблица, в которой самому можно создать поля. Не подскажите как? Это был бы выход

очень просто, по компоненте щёлкаешь правой кнопкой и выбирешь редактор. А в коде есть у меня такое:

Код:
function TDM.SaveDSByDxMem(DS: TpFibDataSet; Filename: string): String;
Var
s:TFileStream;
dxMem : TdxMemData;
begin
s := TFileStream.Create(FileName, fmCreate);
dxMem := TdxMemData.Create(nil);
try
dxMem.Close;
dxMem.CreateFieldsFromDataSet(ds);
dxMem.open;
dxMem.LoadFromDataSet(ds);
dxMem.SaveToStream(s);
dxMem.Close;
finally
FreeL(s);
FreeL(dxMem);
end;
end;
Автор: clear2121
Дата сообщения: 10.09.2007 12:22
X11
Огромное тебе СПАСИБО!
Я делаю так
TmpData1 = new TdxMemData( NULL );
TmpData1->Close();
TmpData1->CreateFieldsFromDataSet((TDataSet*)Form1->qBOX); // это мой запрос, там пусто

Потом
TmpData1->Open();
TmpData1->Append();
TmpData1->FieldByName("ID_BOX")->AsInteger = 0;
И здесь вылазит ошибка, что нет такого поля. Не подскажешь, что я не так делаю? Пытаюсь в поле загнать значение
Автор: X11
Дата сообщения: 10.09.2007 12:31
ТАК СОЗДАЙ ЕГО! Открой редактор полей в дизайне и создай.

Добавлено:

Цитата:
TmpData1->CreateFieldsFromDataSet((TDataSet*)Form1->qBOX);

значит нету и такого поля в qBOX
Автор: aleksandrus
Дата сообщения: 10.09.2007 12:43
A_V
спасибо за интересные идеи, надо будет попробовать.
А пока мне в голову пришло выставить SyncMode = false, это не изменит логику работы, если грид у меня "readonly" ? (не делает ли SyncMode чего-нибудь кроме выставления в датасете фокуса на ту же запись, что выбрана в гриде?)
А по поводу вопроса про выделение текста - я в принципе и хочу написать свой поиск, так как стандартный Search->locate ищет только с начала строки в каждой ячейки, а мне надо, чтобы подстроку искал в любом месте..
Автор: clear2121
Дата сообщения: 10.09.2007 12:54
X11
Спасибо еще раз! Я понял, что надо создать поле. Видиш ли, я все создаю руками
F = new TField(NULL);
F->FieldName = "ID_BOX";
F->SetFieldType(ftInteger);
TmpData1 = new TdxMemData( NULL );
TmpData1->Close();
TmpData1->Fields->Add( F );

Но когда
TmpData1->FieldByName("ID_BOX")->AsInteger = 0;
Говорит, что "Unsupported field type: ID_BOX"
Думаю, что не так



Добавлено:
X11
А если создаю на форме и связываю с грид, то после
Grid1->BeginUpdate();
TmpData2->Open();
TmpData2->Append();
TmpData2->FieldByName("ID_BOX")->AsInteger = 0;
TmpData2->FieldByName("INVN")->AsString = Form->E1->Text.Trim();
Grid1->EndUpdate();
TmpData2->SaveToTextFile("abc.txt");

На гриде ничего не отображается, а в файле все данные есть. ПОЧЕМУ?

Добавлено:
Убрал Grid1->BeginUpdate(); и Grid1->EndUpdate(); и все стало отображаться. Блин, ересь какая то
Автор: X11
Дата сообщения: 10.09.2007 14:12
нет, стоп, ты или ручками добавляй все поля или забирай из датасета

Добавлено:
Grid1 что это за тип, конкретно
Автор: Jack4
Дата сообщения: 10.09.2007 16:19
Люди, ну помогите!

Есть VerticalGrid в нем ImageComboBox. Заношу туда 10 значений и хочу чтобы текущее было третье:

TcxImageComboBox(Row1.Properties).ItemIndex := 3; - не работает

TcxImageComboBox(Row1.Properties.EditProperties).ItemIndex := 3; - не работает

Как это сделать????
Автор: xokc
Дата сообщения: 10.09.2007 19:12
Jack4
Так пробовал?
(Row1.Properties as TcxImageComboBoxProperties).ItemIndex := 3
Автор: clear2121
Дата сообщения: 11.09.2007 03:45
X11
Ну вот утро, новый рабочий день.
Если я один TdxMemData создаю ручками, а другой создаю из компонента то, думаю, это не важно. Важен сам механизм.

F = new TField(NULL);
F->FieldName = "ID_BOX";
F->SetFieldType(ftInteger);
TmpData1 = new TdxMemData( NULL );
TmpData1->Close();
TmpData1->Fields->Add( F );

вроде все правильно. Но не работает. Вышел из положения, создав из компоненты. Сдам первую часть проги, потом разберусь.

Спасибо тебе за участие и сочувствие.
Автор: OXDBA
Дата сообщения: 11.09.2007 09:12
clear2121
F = new TIntegerField(NULL);
Автор: clear2121
Дата сообщения: 11.09.2007 09:12
Вопрос по TcxDBListBox.
Положил на форму, подклюсил ДатаСоурс, который подключен к Кверу. В запросе есть несколько записей. Только они не показываются. Сколько записей, столько пустых строчек. Где порыться?

СПАСИБО!
Автор: OXDBA
Дата сообщения: 11.09.2007 09:17
clear2121
Похоже в DataBinding->DataField
Автор: clear2121
Дата сообщения: 11.09.2007 09:23
OXDBA
СПАСИБО!
Автор: IceMan T
Дата сообщения: 11.09.2007 09:54
Мужчины, ну подскажите же наконец где взять ExpressSkins Library для Delphi 7. Ну очень надо. Если есть у кого - скиньте на мыло IceMan_T@Mail.ru. Премного благодарен
Автор: clear2121
Дата сообщения: 11.09.2007 10:09
OXDBA
А что там может быть не так? Чтоб не заморачиваться использую Грид.
Автор: OXDBA
Дата сообщения: 11.09.2007 10:18

Цитата:
А что там может быть не так?

Либо пусто, либо указано неверное имя поля.
Автор: jicoff
Дата сообщения: 11.09.2007 11:41
clear2121

Не знаю как на счет TmpData1->Fields->Add( F ), но в своих проектах использую Field->DataSet = MemData

Добавлено:
Правда дело может быть в том, что в конце добавления полей надо сделать DataSet->FieldDefs->Update()
Автор: clear2121
Дата сообщения: 11.09.2007 12:30
OXDBA
Проверил. И поле правильное, и данные там есть. Он же мне елозит. Причем сколько записей, столько пустых строк. Ладно, пользуюсь гридом
Автор: X11
Дата сообщения: 13.09.2007 13:33
---
Автор: ArtemiyUO
Дата сообщения: 14.09.2007 07:38
clear2121
Если все еще не получилось динамически создать поле в датасете, то вот код которым пользуюсь я.


Код: var
Link : TField;
// создадим дополнительный филд
with TFloatField.Create(oraDataSet) do begin
FieldName := 'xx';
DataSet := oraDataSet;
Name := 'xx';
oraDataSet.FieldDefs.Add(Name, ftFloat);
end;

// удалим динамически созданные поля
if oraDataSet.FieldDefs.IndexOf('xx') >= 0 then
begin
Link := oraDataSet.Fields.FieldByName('xx');
oraDataSet.Fields.Remove(Link);
FreeAndNil(Link);
oraDataSet.FieldList.Update;
end;
Автор: clear2121
Дата сообщения: 14.09.2007 10:27
ArtemiyUO
Спасибо, попробую

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182

Предыдущая тема: Язык программирования на русском языке


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