Форум: "Начинающим";
Текущий архив: 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.044 c