Подскажите почему TcxSpreadSheetBook не хочет открывать excel книгу пишет invalid data. в Книга имеются защищенные ячейки что по ошибке туда что нибуть не записали
» Использование DevExpress (часть 3)
Есть связка firebird 2.0.5 <- fibplus 6.9.6 <-cxGrid x43
Добавляю в цикле записи в таблицу, добавляю записи НЕ через fibDataSet, а прямо в грид
Код: ForEachRow(false, FillFromSpr);
....
FillFromSpr(...)
begin
.....
dbgSyncSpr.DataController.Append;
dbgSyncSprID_SPR.EditValue := Values[ARowInfo.RecordIndex, dbgIdSprID.Index];
dbgSyncSpr.DataController.Post;
....
Добавляю в цикле записи в таблицу, добавляю записи НЕ через fibDataSet, а прямо в грид
Код: ForEachRow(false, FillFromSpr);
....
FillFromSpr(...)
begin
.....
dbgSyncSpr.DataController.Append;
dbgSyncSprID_SPR.EditValue := Values[ARowInfo.RecordIndex, dbgIdSprID.Index];
dbgSyncSpr.DataController.Post;
....
Итак, столкнулся кое с какой не поняткой при переходе с EhLib на DevExpress, а точнее при замене TDBLookupComboboxEh на TcxDBLookupComboBox.
Заменил стало быть компоненты, установил ListSource, ListFieldNames и KeyFieldNames. Запускаю стало быть проект, показывает мой список без проблем, но при это после выбора в списке чего-нибудь комбик складывается и пустота в нем. То есть сам список комбика показывается, но как бы ничего не выбирается. В чем собака зарылась?
Заменил стало быть компоненты, установил ListSource, ListFieldNames и KeyFieldNames. Запускаю стало быть проект, показывает мой список без проблем, но при это после выбора в списке чего-нибудь комбик складывается и пустота в нем. То есть сам список комбика показывается, но как бы ничего не выбирается. В чем собака зарылась?
X11
Цитата:
В ms-help://borland.bds5/ExpressDataController.BDS5/ExpressDataController/IDH_TcxCustomDataController_Append.htm указано:
Note: Do not call the Append method within the BeginUpdate/EndUpdate and BeginFullUpdate/EndFullUpdate blocks.
Добавлено:
Cryogen2003
Цитата:
Вы не забыли установить свойства DataBinding.DataSource и DataBinding.DataField?
Цитата:
Проблема в том, что первые 100-150 записей добавляются сравнительно быстро, в вот потом... примерно 1 запись в секунду.
beginupdate использую
В ms-help://borland.bds5/ExpressDataController.BDS5/ExpressDataController/IDH_TcxCustomDataController_Append.htm указано:
Note: Do not call the Append method within the BeginUpdate/EndUpdate and BeginFullUpdate/EndFullUpdate blocks.
Добавлено:
Cryogen2003
Цитата:
То есть сам список комбика показывается, но как бы ничего не выбирается. В чем собака зарылась?
Вы не забыли установить свойства DataBinding.DataSource и DataBinding.DataField?
vladman
Дык и не устанавливал я эти поля. В EhLib все и так работало. ок, как сделать так, чтобы у меня все работало без проблем?
есть Table, в нем данные ListId и ListValue (ну то есть какие-то действия и стало быть их коды), надо дать пользователю выбирать ListValue, но в базу как-бы нуно сохранять ListId. Как сохранить я сам разберусь, но как сделать так, чтобы все работало. Table один, DataSource один, если и ListSource и в DataBinding.DataSource запихнуть мой DataSource, орет, что идет зацикливание.
Дык и не устанавливал я эти поля. В EhLib все и так работало. ок, как сделать так, чтобы у меня все работало без проблем?
есть Table, в нем данные ListId и ListValue (ну то есть какие-то действия и стало быть их коды), надо дать пользователю выбирать ListValue, но в базу как-бы нуно сохранять ListId. Как сохранить я сам разберусь, но как сделать так, чтобы все работало. Table один, DataSource один, если и ListSource и в DataBinding.DataSource запихнуть мой DataSource, орет, что идет зацикливание.
Здравствуйте только начал изучать компоненты DevExpress и столкнулся с такой проблемой, пытаюсь занести данные в cxGrid использую AdoConnection StoredProc DateSet. В StoredProc хранимка следующего содержания:
SELECT pd.PersonId, pd.DocText
FROM PersonDoc pd
в PersonDoc 3 разных записи
cxGrid2DBTableView1DBColumn1 -> properties =LookupComboBox, ListFieldName =DocText, KeyFieldNames =id, остальные свойства по дефолту
в результате выполнения в cxGrid заносится первая запись и повторяется 3 раза, хотя в фильтр->настроики (выпадающ список) выводятся все записи. Подскажите пожалуйста что не так?
SELECT pd.PersonId, pd.DocText
FROM PersonDoc pd
в PersonDoc 3 разных записи
cxGrid2DBTableView1DBColumn1 -> properties =LookupComboBox, ListFieldName =DocText, KeyFieldNames =id, остальные свойства по дефолту
в результате выполнения в cxGrid заносится первая запись и повторяется 3 раза, хотя в фильтр->настроики (выпадающ список) выводятся все записи. Подскажите пожалуйста что не так?
vladman, спасибище!!!
Изменил на
dbgSyncSpr.DataController.AppendRecord;
теперь летает. Ура!
Добавлено:
Летает-то летает. Только теперь после завершения цикла выполнения в базе только одна запись
Добавлено:
а в этом примере не очень-то и понял как добавлять правильно записи через грид в базу
ms-help://borland.bds5/ExpressDataController.BDS5/ExpressDataController/IDH_Example_TcxCustomDataSource_AppendRecord_InsertRecord.htm
Изменил на
dbgSyncSpr.DataController.AppendRecord;
теперь летает. Ура!
Добавлено:
Летает-то летает. Только теперь после завершения цикла выполнения в базе только одна запись
Добавлено:
а в этом примере не очень-то и понял как добавлять правильно записи через грид в базу
ms-help://borland.bds5/ExpressDataController.BDS5/ExpressDataController/IDH_Example_TcxCustomDataSource_AppendRecord_InsertRecord.htm
Cryogen2003
Не совсем понятно что именно вы хотите сделать. Если хотите чтобы в некоторое поле таблицы А сохранялись не сами значения из таблицы B а их (значений) коды, а при визуализации данных таблицы А вы эти коды резолвите в соответствующие значения с помощью cxDBLookupComboBox, то совершенно справедливо "орет, что идет зацикливание" так как в вашем случае таблица А и таблица В это одна и та же таблица. Если вы хотите просто лукап, которые не сохраняет значения в таблицу, тогда используйте не DBAware версию лукапа - cxLookupComboBox .
Чтобы все работало - ListSource (это таблица В) оставляйте так как есть, а в DataBinding.DataSource укажите DataSource ссылающийся на другую таблицу (таблица А) и в DataBinding.DataField соответствующее поле из этой же таблицы А.
Не совсем понятно что именно вы хотите сделать. Если хотите чтобы в некоторое поле таблицы А сохранялись не сами значения из таблицы B а их (значений) коды, а при визуализации данных таблицы А вы эти коды резолвите в соответствующие значения с помощью cxDBLookupComboBox, то совершенно справедливо "орет, что идет зацикливание" так как в вашем случае таблица А и таблица В это одна и та же таблица. Если вы хотите просто лукап, которые не сохраняет значения в таблицу, тогда используйте не DBAware версию лукапа - cxLookupComboBox .
Чтобы все работало - ListSource (это таблица В) оставляйте так как есть, а в DataBinding.DataSource укажите DataSource ссылающийся на другую таблицу (таблица А) и в DataBinding.DataField соответствующее поле из этой же таблицы А.
vladman
Да нет же, есть только таблица А, нужно чтоб показывалось поле B, а в базу записывалось поле C (код поля B). в лукапе EhLib такой фокус без проблем проходил
Да нет же, есть только таблица А, нужно чтоб показывалось поле B, а в базу записывалось поле C (код поля B). в лукапе EhLib такой фокус без проблем проходил
rainebove
А в сам cxGrid вы каким запросом выбираете данные?
Добавлено:
Cryogen2003
Цитата:
Не понимаю, к сожалению, что вы имеете ввиду. Давайте откомпилированный exe в котором это реализовано с помощью EhLib.
А в сам cxGrid вы каким запросом выбираете данные?
Добавлено:
Cryogen2003
Цитата:
в лукапе EhLib такой фокус без проблем проходил
Не понимаю, к сожалению, что вы имеете ввиду. Давайте откомпилированный exe в котором это реализовано с помощью EhLib.
vladman
Ну я боюсь exe переслать не смогу, но может быть вы и правы и стоит просто отказаться в пользу обычного лукапа и писать ручками.
Добавлено:
vladman
Оказывается действительно, мне TcxLookupComboBox более подходит под мои нужды, большое спасибо.
Ну я боюсь exe переслать не смогу, но может быть вы и правы и стоит просто отказаться в пользу обычного лукапа и писать ручками.
Добавлено:
vladman
Оказывается действительно, мне TcxLookupComboBox более подходит под мои нужды, большое спасибо.
Как правильно?
Так:
Код:
dbgSyncSpr.DataController.AppendRecord;
RecIndex := dbgSyncSpr.DataController.RecordCount - 1;
dbgSyncSpr.DataController.Values[RecIndex, dbgSyncSprID_SPR.Index] := Values[ARowInfo.RecordIndex, dbgIdSprID.Index];
dbgSyncSpr.DataController.Values[RecIndex, dbgSyncSprID_IN_KVX.Index] := FBN('ID').AsInteger;
dbgSyncSpr.DataController.Values[RecIndex, dbgSyncSprVALUE_IN_KVX.Index] := FBN('name').AsString;
Так:
Код:
dbgSyncSpr.DataController.AppendRecord;
RecIndex := dbgSyncSpr.DataController.RecordCount - 1;
dbgSyncSpr.DataController.Values[RecIndex, dbgSyncSprID_SPR.Index] := Values[ARowInfo.RecordIndex, dbgIdSprID.Index];
dbgSyncSpr.DataController.Values[RecIndex, dbgSyncSprID_IN_KVX.Index] := FBN('ID').AsInteger;
dbgSyncSpr.DataController.Values[RecIndex, dbgSyncSprVALUE_IN_KVX.Index] := FBN('name').AsString;
X11
Цитата:
Этот пример вам не подходит, так как он для cxCustomDataSource, который "Represents a custom data source for a grid control." В случае с примером это TStringList.
И вообще "The AppendRecord method adds a new empty record to your data controller. You should use this method only in provider and unbound modes. If the data controller represents dataset data (TcxDBDataController), you should use the Append method instead." - ms-help://borland.bds5/ExpressDataController.BDS5/ExpressDataController/IDH_TcxCustomDataController_AppendRecord.htm
Добавлено:
Cryogen2003
Цитата:
Так и не нужен ваш большой проект. Сделайте новый проект с dxMemData как источник для Ehlib Lookup, чтобы проиллюстрировать что вы имеете ввиду.
Цитата:
а в этом примере не очень-то и понял как добавлять правильно записи через грид в базу
Этот пример вам не подходит, так как он для cxCustomDataSource, который "Represents a custom data source for a grid control." В случае с примером это TStringList.
И вообще "The AppendRecord method adds a new empty record to your data controller. You should use this method only in provider and unbound modes. If the data controller represents dataset data (TcxDBDataController), you should use the Append method instead." - ms-help://borland.bds5/ExpressDataController.BDS5/ExpressDataController/IDH_TcxCustomDataController_AppendRecord.htm
Добавлено:
Cryogen2003
Цитата:
Ну я боюсь exe переслать не смогу
Так и не нужен ваш большой проект. Сделайте новый проект с dxMemData как источник для Ehlib Lookup, чтобы проиллюстрировать что вы имеете ввиду.
Цитата:
ms-help://borland.bds5/ExpressDataController.BDS5/ExpressDataController/IDH_TcxCustomDataController_AppendRecord.htm
Это я читал, всё получилось, записи добавляются мгновенно.
Интересует, как правильно
так?
dbgSyncSpr.DataController.AppendRecord;
RecIndex := dbgSyncSpr.DataController.RecordCount - 1;
или так?
RecIndex := dbgSyncSpr.DataController.AppendRecord;
Кстати OptionsData.AppendRecord должно быть в True
И ещё.
Решил добавлять запис напрямую в датасет. Прикол в том, что этот способ также начал тормозить примерно после 100-ой добавленной записи ))))
Наверное потому, что при вызове
pFibDataSet1.Append cxGrid тоже вызывает DatacontrollerAppend )))))
Пятница... уже туго соображаю. ><
vladman
Да я уже разобрался, мне действительно не нужно было в моей задачи с DBAware и TcxLookupComboBox умеет все тоже самое, что и компонент из EhLib. просто в EhLib сделано так, если устанавливаешь DataSource, то он автоматом устанавливает, если не устанавливаешь, он просто в KeyValue показывает и все. Мне как раз такой вариант устраивает. Просто думал, что TcxLookupComboBox не умеет работать с ListSource, но я ошибался и сейчас все уже сделал. Спасибо
Да я уже разобрался, мне действительно не нужно было в моей задачи с DBAware и TcxLookupComboBox умеет все тоже самое, что и компонент из EhLib. просто в EhLib сделано так, если устанавливаешь DataSource, то он автоматом устанавливает, если не устанавливаешь, он просто в KeyValue показывает и все. Мне как раз такой вариант устраивает. Просто думал, что TcxLookupComboBox не умеет работать с ListSource, но я ошибался и сейчас все уже сделал. Спасибо
X11
Цитата:
Так данные в БД уже появляются?
RecIndex := dbgSyncSpr.DataController.AppendRecord; - так правильнее.
Цитата:
Нет, не вызывается.
У вас, скорее всего, датасет настроен на работу с транзакциями как AutoCommit.
Попробуйте все записи вставлять в рамках одной транзакции. 1000 записей вставятся меньше чем за секунду, правда, если у вас нет для этой таблицы сложных триггеров.
Цитата:
Летает-то летает. Только теперь после завершения цикла выполнения в базе только одна запись
Так данные в БД уже появляются?
RecIndex := dbgSyncSpr.DataController.AppendRecord; - так правильнее.
Цитата:
pFibDataSet1.Append cxGrid тоже вызывает DatacontrollerAppend
Нет, не вызывается.
У вас, скорее всего, датасет настроен на работу с транзакциями как AutoCommit.
Попробуйте все записи вставлять в рамках одной транзакции. 1000 записей вставятся меньше чем за секунду, правда, если у вас нет для этой таблицы сложных триггеров.
Цитата:
Так данные в БД уже появляются?
На столько быстро, что я в шоке
Цитата:
Нет, не вызывается.
У вас, скорее всего, датасет настроен на работу с транзакциями как AutoCommit.
Попробуйте все записи вставлять в рамках одной транзакции. 1000 записей вставятся меньше чем за секунду, правда, если у вас нет для этой таблицы сложных триггеров.
Это я знаю. Так всегда и делаю.
Просто сейчас через грид и с автоподтверждением работает ну очень быстро О_о, может грид сам ка-то кеширует или вызывает Post через определённое кол-во записей.
vladman
Цитата:
Никаким, выполняю хранимую процедуру.
StoredProc->Active = true
Цитата:
А в сам cxGrid вы каким запросом выбираете данные?
Никаким, выполняю хранимую процедуру.
StoredProc->Active = true
rainebove
Цитата:
Так эта процедура дает данные для вашего грида, тогда не понятно зачем вам нужен в cxGrid2DBTableView1DBColumn1 -> properties =LookupComboBox, который ссылается на эту же процедуру. Давайте пример в исходных кодах, может мы о разном говорим.
Цитата:
Никаким, выполняю хранимую процедуру.
Так эта процедура дает данные для вашего грида, тогда не понятно зачем вам нужен в cxGrid2DBTableView1DBColumn1 -> properties =LookupComboBox, который ссылается на эту же процедуру. Давайте пример в исходных кодах, может мы о разном говорим.
Здравствуйте, подскажите можно ли сделать мигание текста в ячейке?
gyani
Цитата:
Посмотрите в Knowledge Base статью и пример к ней. Как раз по вашему вопросу - Flashing cells
Цитата:
подскажите можно ли сделать мигание текста в ячейке?
Посмотрите в Knowledge Base статью и пример к ней. Как раз по вашему вопросу - Flashing cells
Сегодня поставил последний DevExpress от feandy на Delphi 2010 и заметил такую вещь в Object Inspector в свойствах любого DevExpressовского компонента Style->AssignedValues вижу следующее:
vladman спасибо
FunCode
А куда именно смотреть-то?
А куда именно смотреть-то?
xokc
Цитата:
в смысле куда смотреть ? я же привел скриншот на котором обозначена проблема,
интересно узнать как у кого на 2010 46 версия поставилась ?
Цитата:
А куда именно смотреть-то?
в смысле куда смотреть ? я же привел скриншот на котором обозначена проблема,
интересно узнать как у кого на 2010 46 версия поставилась ?
vladman
Цитата:
Я просто незнаю как еще данные отобразить в гриде, у меня есть пример с работающим гридом там сделано так те через cxGrid2DBTableView1DBColumn1 -> properties =LookupComboBox. Пробовал тупо скопировать не работает.
В идеале нужно чтобы при нажатии на кнопку добавить, в навигаторе, в cxGrid появлялась новая строка с выпадающ списком (LookupComboBox) и в неи содержимое хранимки. Но пока вообще данные выбрать неполучается
Исходников нет все пока делал тока через интерфейс
Цитата:
Так эта процедура дает данные для вашего грида, тогда не понятно зачем вам нужен в cxGrid2DBTableView1DBColumn1 -> properties =LookupComboBox, который ссылается на эту же процедуру. Давайте пример в исходных кодах, может мы о разном говорим.
Я просто незнаю как еще данные отобразить в гриде, у меня есть пример с работающим гридом там сделано так те через cxGrid2DBTableView1DBColumn1 -> properties =LookupComboBox. Пробовал тупо скопировать не работает.
В идеале нужно чтобы при нажатии на кнопку добавить, в навигаторе, в cxGrid появлялась новая строка с выпадающ списком (LookupComboBox) и в неи содержимое хранимки. Но пока вообще данные выбрать неполучается
Исходников нет все пока делал тока через интерфейс
rainebove
Цитата:
Попробуйте сначала добиться отображения/добавления данных в гриде без лукапа. Затем читайте в справке как добавить лукап в качестве InplaceEditor'а.
Цитата:
Я просто незнаю как еще данные отобразить в гриде
Попробуйте сначала добиться отображения/добавления данных в гриде без лукапа. Затем читайте в справке как добавить лукап в качестве InplaceEditor'а.
vladman
Если не сложно подскажите какие своиства изменить
Я делаю так cxGrid2Level1 - DataSource =dsDoc (Tdatasource где dataset=spDoc)
cxGrid2Level1 - DataSet=spDoc (TADOSrtoredProc с хранимкой)
Link To DataSource = dsDoc
Если не сложно подскажите какие своиства изменить
Я делаю так cxGrid2Level1 - DataSource =dsDoc (Tdatasource где dataset=spDoc)
cxGrid2Level1 - DataSet=spDoc (TADOSrtoredProc с хранимкой)
Link To DataSource = dsDoc
Уважаемые!!!!
Кто-нибудь сталкивался с такой проблемой
В cxGrid'е даты:
02.02.2009
27.12.2006
- представлены КАК ПУСТОЕ ПОЛЕ ???????
Кто-нибудь сталкивался с такой проблемой
В cxGrid'е даты:
02.02.2009
27.12.2006
- представлены КАК ПУСТОЕ ПОЛЕ ???????
rainebove
Цитата:
Где вы нашли у Level свойство DataSource и DataSet?
Нужно так - cxGrid2DBTableView1.DataController.DataSource = dsDoc,
а в dsDoc.Dataset = spDoc
Добавлено:
kii
Цитата:
А что в этих датах такого особенного? Как представляются другие даты?
Цитата:
cxGrid2Level1 - DataSource =dsDoc
Где вы нашли у Level свойство DataSource и DataSet?
Нужно так - cxGrid2DBTableView1.DataController.DataSource = dsDoc,
а в dsDoc.Dataset = spDoc
Добавлено:
kii
Цитата:
Кто-нибудь сталкивался с такой проблемой
А что в этих датах такого особенного? Как представляются другие даты?
Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
Предыдущая тема: Delphi: tcp клиент в потоке
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.