Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.06.01;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.023 c
2-1210586371
NieL
2008-05-12 13:59
2008.06.01
функция GetAge


15-1208514535
Ega23
2008-04-18 14:28
2008.06.01
Программы генерации RSA-ключей


15-1208766163
dreamse
2008-04-21 12:22
2008.06.01
Отличия С# от Delphi ?


15-1208510745
Kolan
2008-04-18 13:25
2008.06.01
А есть у кого «Дизайн привычных вещей»?


2-1209926951
Res
2008-05-04 22:49
2008.06.01
Проблемы с потоками