Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.04.18;
Скачать: [xml.tar.bz2];

Вниз

Таьлица в памяти   Найти похожие ветки 

 
ВИКТОР   (2004-03-19 18:49) [0]

Помогите пожалуйста.
Мне нужно считать несколько записей из Recordsetа и поместить их в памяти компьютера. Для этого требуется создать структуру , которая будет хранить в памяти этот небольшой массив записей.
Как это сделать ведь я не знаю не количество полей ни их типы, так как Recordset может быть разным, то есть ссылаться на разные таблицы.
Заранее спасибо за помощь.


 
sniknik ©   (2004-03-19 19:05) [1]

ADODataSet1.CommandText:= "SELECT TOP 10 * FROM xXxxxx";
ADODataSet1.Open;
ADODataSet1.Connection:= nil;

все, имеем рекордсет в памяти компьютера, можно дабавлять/менять база не изменится, структура будет зависит от базовых полей в запросе.


 
KSergey ©   (2004-03-21 07:29) [2]

sniknik, ты - гений!!!!
Я 2 года искал как сделать нечто подобное, но все, кто, возможно, и знал - делали лишь умные рожи или ссылались на коммерческие секреты...
А как все просто, оказывается!

А может, если не очень затруднит, дашь рецепт оставшейся небольшой проблемки: если в DataSet есть поле главого ключа, то после "отрыва" дельфи не дает его править, либо (после того как я принудительно снял флажек "ReadOnly у поля) провайдер ADO"шный стал писать "произошли ошибки во время выполнения многошаговой операции". В принципе и без этого можно жить, но для новых записей таки хотелось бы как-то это поле прописывать...
Может подскажете как??

А может вообще можно где-то читнуть про все это (ADO"шный DataSet в "автономном" режиме)? Что-то мне на ум слова не приходят подходящие для поиска...


 
KSergey ©   (2004-03-22 08:00) [3]

Позволю себе поднять тему
Может многоуважаемый sniknik © найдет возможность прочитать и ответить? ;)


 
Hooch ©   (2004-03-22 08:40) [4]

можно либо DataSet полность ручками сделать через CreateDataSet но я обычно так делал: в DataSet.CommandText пишем:

declare @MyTable(ID INT, NAME VARCHAR(100))
insert into @MyTable select X,Y from Z
select * from @MyTable

потом либо Connection=nil либо LockType = ltBatchOptimistic и любое поле можно редактировать


 
KSergey ©   (2004-03-22 08:53) [5]

>  [4] Hooch ©   (22.03.04 08:40)

Это синтаксис какого сервера? 2k?


 
Hooch ©   (2004-03-22 09:02) [6]

ms sql 2000


 
Hooch ©   (2004-03-22 09:07) [7]

ошибся немного

declare @MyTable table(ID int, name varchar(1000))


 
sniknik ©   (2004-03-22 10:29) [8]

KSergey ©   (22.03.04 08:00) [3]
прочитал ;о)
чего ответить не знаю. :( не делал подобного.

для MSSQL так не получилось (ReadOnly поменять у поля), вот у access это проходит, если автоинкременту при подключении к access поменят ридонли, он прекрасно редактируется в отсоедененном рекордсете.
можно посмотреть разницу, какого типа возвращает поля access/mssql ... ну в общем разобратся. может и получится сменить тип на клиенте (либо предварительно нужного создать перед запросом)
но похоже проще воспользоваться от > Hooch ©   (22.03.04 08:40) [4]
должно пройти (хотя так не пробовал, пока)


 
Nikky ©   (2004-03-22 11:29) [9]

Дело в том что поле ms sql identity создается в Дельфе как tAutoIncField, его нельзя редактировать соответственно.
Если в запросе указать id = cast (id as int), то создастся как tIntegerField и будет доступно для редактирования (снять флажок ReadOnly)


 
Mike_Goblin ©   (2004-03-22 11:31) [10]

Сталкивался с такой проблемой, нашел три пути решения
1. Использование ADODataSet в отключенном режиме. то есть данные хранятся в памяти, при завершении приложения сбрасываются на диск. см решение от siknik
2. Использование briefcase модели средствами MIDAS http://www.rsdn.ru/article/db/midas_briefcase.xml
3. Использование Memory datasets


 
sniknik ©   (2004-03-22 12:12) [11]

Nikky ©   (22.03.04 11:29) [9]
нет не получается, редактировать не хочет.
а вот так как у > Hooch © работает (также как со временной таблицей)
видать както он всетаки понимает, что его "обманывают" и не дает этого сделать. также не дает редактировать константные выражения в запросе (такие к примеру cast (1 as int) AS ID)
т.е. дело не только в автоикременте, есть еще какойто признак "константности"/"получения значения только с сервера".
в общем надо разбиратся, если нужно менять именно рекордсет на клиенте, и возможно это невозможно ессли например константное значение представленно в рекордсете ссылкой на значение, или есть какието различия в структуре рекордсета редактируемые/нередактируемые поля (т.е. не только признаки/опции)

использовать клиентдатасет наверняка можно, но это задачка немного отличающаяся от исходной (с тем же успехом, делаем второй датасет(чтобы не привлекать мидас), сами формируем нужные поля(редактируемые) и перекачиваем данные) не того класса задачка (ИМХО). одно дело разобратся во внутренностях рекордсета другое найти ему замену.


 
KSergey ©   (2004-03-22 18:58) [12]

Всем спасибо!
Наконец-то есть куда рыть! ;)



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2004.04.18;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.035 c
1-1080576314
gabriel
2004-03-29 20:05
2004.04.18
Как создать свой тулбар в IE


1-1080443531
Бен
2004-03-28 07:12
2004.04.18
Можно как-нибудь открыть html или doc файл в среде Delphi ?


14-1080541526
noname
2004-03-29 10:25
2004.04.18
компиляция


14-1080211574
panov
2004-03-25 13:46
2004.04.18
PGP в TheBat


14-1080482122
KORN
2004-03-28 17:55
2004.04.18
Установка Win98 на другой диск?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский