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

Вниз

ADO + Access   Найти похожие ветки 

 
Dmitry_177   (2008-05-04 12:13) [0]

Как при помощи ADO добавить новую запись в таблицу? Интересен момент с индексом строки.. просмотрев в самом Accesse файл mdb, увидел там что поле "Код", грубо говоря идентификатор строки, ставится последовательно.. Сделав в Delphi следующее:

 var
   MyRecSet: _Recordset;

 MyRecSet.MoveLast;
 MyRecSet.AddNew(0, 0);
 MyRecSet.Fields.Item[1].Value := "efcwef1";     // строка
 MyRecSet.Fields.Item[2].Value := "20.12.1990";  // дата
 MyRecSet.Update(0, 0);


строка Код не забивается автоматически по порядку.. вот кто как с этим боролся? И еще.. Правильно ли что я переношу курсов в конец функцией MoveLast перед записью? И правильно что в функциях AddNew и Update в их параметрах я задал нули?


 
palva ©   (2008-05-04 14:30) [1]

> строка Код не забивается автоматически по порядку.. вот кто как с этим боролся?
С этим борются те, кто думает, что строки таблицы хранятся в определенном порядке.

> Правильно ли что я переношу курсов в конец функцией MoveLast перед записью?

Неправильно

> И правильно что в функциях AddNew и Update в их параметрах
> я задал нули?

Ну если с нулями работает, то правильно. Вообще-то я бы попытался ничего не задавать. В конце концов, есть специальное значение Unassigned для этих целей.


 
Dmitry_177   (2008-05-04 18:00) [2]

Подскажите еще вот в чем, делаю sql команды.. так вот, текст sql запроса слишком длинный, и если сделать так:

DBCommand.CommandText := "sql запрос";
DBCommand.Execute(RecsAffected, NULL, 0);
RecsAffected := NULL;


то программа не компилируется, т.к. DBCommand.CommandText имеет тип WideString, а строка sql запроса длиннее.. что можно сделать? Подскажите..

И еще вопросик про sql запросы в delphi.. в одну строку если их писать, то потом не очень удобно читать его.. а если сделать перенос строк, то delphi не распознает следующую строку как продолжение текущей строки запроса.. что можно тоже сделать?


 
Anatoly Podgoretsky ©   (2008-05-04 18:31) [3]

> Dmitry_177  (04.05.2008 18:00:02)  [2]

Теперь тоже самое по русски и с примерами неверного кода.


 
Плохиш ©   (2008-05-04 21:32) [4]


> Dmitry_177   (04.05.08 18:00) [2]
> Подскажите еще вот в чем, делаю sql команды.. так вот, текст
> sql запроса слишком длинный, и если сделать так:
>
> DBCommand.CommandText := "sql запрос";
> DBCommand.Execute(RecsAffected, NULL, 0);
> RecsAffected := NULL;
>
> то программа не компилируется, т.к. DBCommand.CommandText
> имеет тип WideString, а строка sql запроса длиннее.. что
> можно сделать? Подскажите..

Ужасть, пора хоть что-то по основам прочитать...

DBCommand.CommandText := "sql запрос stroka1" +
"stroka 2" +
 ....
"stroka 125mil"enow 21";


 
Dmitry_177   (2008-05-05 09:29) [5]


> Ужасть, пора хоть что-то по основам прочитать...
>
> DBCommand.CommandText := "sql запрос stroka1" +
> "stroka 2" +
>  ....
> "stroka 125mil"enow 21";

Я так и думал.. просто думал может можно как-то еще ))

А что можно сделать, что sql запрос длиннее WideString?


 
Palladin ©   (2008-05-05 09:31) [6]

длиннее гигабайта?

"ффига"се у вас запросы, сказала база данных и повисла" (С)


 
Anatoly Podgoretsky ©   (2008-05-05 10:30) [7]


> А что можно сделать, что sql запрос длиннее WideString?

Нельзя, для пользователя отведено только 2 гб виртуальное памяти, да и Дельфи тебе не позволит обойти это ограничение, размер выделяемой памяти как известно задается через Integer, а как известно MaxInt тоже равно 2 гб, так что и ключ /3gb не поможет.
А реально даже разрешеный размер не удастся выделить, он хоть и 2 гб, но на все, все, а не все+все+все


 
sniknik ©   (2008-05-05 10:36) [8]

> А что можно сделать, что sql запрос длиннее WideString?
намного раньше упрешься в ограничение провайдера на длину запроса...

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

> длиннее гигабайта?
а не 2х? вайдстринг 2 гигабайта.
что кстати является и ограничением на обьем базы аксесса... действительно, нифига себе у вас запросы. ;)


 
Anatoly Podgoretsky ©   (2008-05-05 10:40) [9]


> что кстати является и ограничением на обьем базы аксесса.
> .. действительно, нифига себе у вас запросы. ;)

А эта информация не устарела?
Мне недавно ставили программу на основе Акцесс базы, я спросил производителя, как там с 2 гб, он ответил, что в прошлом, формат Акцесс 2003 уже не имеет такого ограничения, у них есть клиенты, у которых размер БД свыше 16 гб.


 
Palladin ©   (2008-05-05 10:40) [10]


> sniknik ©   (05.05.08 10:36) [8]
> а не 2х? вайдстринг 2 гигабайта.

я про буковки, а не про память )


 
sniknik ©   (2008-05-05 10:41) [11]

>> длиннее гигабайта?
> а не 2х?
понял, половина памяти на запрос в программе половина на копию переданную в провайдера... и память кончилась. действительно получается 1 гигабайт максимум.


 
Palladin ©   (2008-05-05 10:41) [12]


> Anatoly Podgoretsky ©   (05.05.08 10:40) [9]

до 4 увеличивали, afaik, но что бы 16... сомневаюсь...


 
sniknik ©   (2008-05-05 10:41) [13]

> я про буковки, а не про память )
???? опять не понятно... ;(


 
sniknik ©   (2008-05-05 10:43) [14]

> А эта информация не устарела?
первый раз слышу...

и наоборот, слышал что прекратили развитие/поддержку в пользу mssql.


 
Palladin ©   (2008-05-05 10:46) [15]


> sniknik ©   (05.05.08 10:41) [13]

имеется ввиду, что в

"select * from table"
19 байт в ANSI, но в WideString это дело занимает 38 байт (+накладные расходы на счетчик и тп)...

потому ANSI запрос не может быть больше чем ~(FreeMem div 2)...


 
Palladin ©   (2008-05-05 10:49) [16]


> sniknik ©   (05.05.08 10:41) [11]

а кстати провайдеру строка разе не by ref передается? помойму by ref... хотя фз...


 
sniknik ©   (2008-05-05 10:54) [17]

> у которых размер БД свыше 16 гб.
может они и имели ввиду когда программа на access работает с базой mssql? иначе трудно обьяснить... бесплатный двиг, и чтобы ограничений меньше чем у mssql express c 4 гигами... не, не может быть.

они могут еще конечно держать базу (единую логически) в нескольких файлах... но это не то, верно?

> а кстати провайдеру строка разе не by ref передается? помойму by ref... хотя фз...
не уверен. хотя, действительно х.з. и проверять не хочется. (вот параметры копируются, это проверял, пытался передать максимально возможное BLOB поле, памяти "елось" в 2 раза больше)


 
Anatoly Podgoretsky ©   (2008-05-05 11:12) [18]


> я про буковки, а не про память )

Так и надо писать 1 гигабуковка


 
Anatoly Podgoretsky ©   (2008-05-05 11:14) [19]


> слышал что прекратили развитие/поддержку в пользу mssql.

Вообще то нет, есть другая рекомендация, использовать в качестве базы (хранилища) mssql, а сам Акцесс использовать как FrontEnd - вроде в этом случае даэе поддержка VBA сохраняется. Тоже относится и к ФоксПро


 
Palladin ©   (2008-05-05 11:16) [20]


> Anatoly Podgoretsky ©   (05.05.08 11:12) [18]

тык я так и сказал, длинна, а не размер :)

тут еще хужее, если все таки строка копируется, то длинна еще силнее ограничена: всего 512мегабуковками... мало то как... ужос... как в таких условиях можно приложения писать...


 
Anatoly Podgoretsky ©   (2008-05-05 11:18) [21]


> может они и имели ввиду когда программа на access работает
> с базой mssql?

Вообще то нет, программа чисто на Акцесс и база родная, правда доверия у меня к источнику информации нет. Женщина, случайно оказалась в этом деле, ее муж разрабатывал систему, а после увольнения она продолжила его дело. Но с VBA разбирается. Особых оснований как верить, так и не верить нет. Разговор был между делом. Для меня и не существенно, на текущий момент размер базы всего 12 мб ( сначала года) события пишутся постоянно, из железа. Если что то мне будет не тяжело произвести сжатие или удалить старые записи, тем более что есть функция перемещения в архив с удалением из текущей.


 
sniknik ©   (2008-05-05 11:24) [22]

Anatoly Podgoretsky ©   (05.05.08 11:14) [19]
ну так, я про тоже.

поддержка движка базы access (jet) остановилась, а в программе access все переводят на mssql.

кстати проверил, попробовал базу в 2003 формате сделать больше 2х гигабайт... как и ожидал не удалось.
после того как база достигла 1,99 гб. запрос
SELECT * INTO Table8 FROM Table1
стал выдавать "EOleException : Ошибочный аргумент"
хотя с Table2 по Table7 выполнялся... "Выполнено применительно к 1440160 записям. (no recordset)"


 
Dmitry_177   (2008-05-05 11:33) [23]

странно тогда почему у меня возникает ошибка:

[Error] Unit1.pas(142): String literals may have at most 255 elements
на строке:
DBCommand.CommandText := "sql запрос";

а если сделать строку покороче то все нормально..


 
Palladin ©   (2008-05-05 11:37) [24]

бедненький :) строковая константа действительное не может быть больше 255 буковок, но ведь можно написать одну большую строковую как две строковых поменьше и между ними значек плюсика


 
sniknik ©   (2008-05-05 11:38) [25]

> почему
компилятор на больше не задумывался.


 
Anatoly Podgoretsky ©   (2008-05-05 12:00) [26]

> sniknik  (05.05.2008 11:24:22)  [22]

Значит обманула она меня, а знал же, что женщинам верить нельзя.


 
Anatoly Podgoretsky ©   (2008-05-05 12:01) [27]

> Dmitry_177  (05.05.2008 11:33:23)  [23]

Так у тебя литерал более 255 символов, а речь идет не о литералах, а о строках.


 
Anatoly Podgoretsky ©   (2008-05-05 12:01) [28]

> sniknik  (05.05.2008 11:38:25)  [25]

Так и не надо и так нечитаемое.



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

Форум: "Начинающим";
Текущий архив: 2008.06.01;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.061 c
2-1210427273
Werewolf-Prankster
2008-05-10 17:47
2008.06.01
Создание Label-ов с помощью TLabel.create


2-1210252414
assassin8899
2008-05-08 17:13
2008.06.01
Quick Reports


2-1210328992
Vasja
2008-05-09 14:29
2008.06.01
Как на форме отобразить картинку


2-1210266876
Riply
2008-05-08 21:14
2008.06.01
Снова выравнивание памяти :)


2-1210499472
Nucer
2008-05-11 13:51
2008.06.01
GetMem и записи со строками





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский