Tomsk Sysadmins Forum
Windows => Программирование => Topic started by: 16alex on August 24, 2006, 08:44:35
-
верен ли с точки зрения синтаксиса запрос select * from laser where metod="амр"
подключаюсь к Dbase файлу через дельфи, запрос делаю через query
-
http://www.slackware.tomsk.ru/docs/questions/ (http://www.slackware.tomsk.ru/docs/questions/)
Вопрос:
Моя {программа, конфигурация, мой оператор SQL} не работает
Ответ:
Это вообще не вопрос, и я не собираюсь задавать еще десяток наводящих вопросов, чтобы выяснить, в чем на самом деле состоит ваша проблема — у меня есть дела и поинтереснее. Когда я вижу подобные вопросы, то обычно посылаю один из следующих ответов:
* Вам к этому больше нечего добавить?
* Ой, это очень плохо. Надеюсь, вы уже это исправили.
* И какое это имеет отношение лично ко мне?
PS. С точки зрения MySQL синтаксис правильный. DBF к сожалению под руками не оказалось.[demiurg@demiurg-home ~]$ mysql test -u demiurg -p --default-character-set='KOI8R'
Enter password:
Welcome to the MySQL monitor. Commands end with; or \g.
Your MySQL connection id is 13 to server version: 5.0.22-log
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> CREATE TABLE `test`.`laser` (
-> `id` int(10) unsigned NOT NULL auto_increment,
-> `metod` varchar(10) NOT NULL default '',
-> PRIMARY KEY (`id`)
-> ) ENGINE=InnoDB DEFAULT CHARSET=cp1251;
Query OK, 0 rows affected (0.02 sec)
mysql> insert into laser(metod) values ('амр');
Query OK, 1 row affected (0.01 sec)
mysql> insert into laser(metod) values ('test');
Query OK, 1 row affected (0.01 sec)
mysql> select * from laser where metod="амр";
+----+-------+
| id | metod |
+----+-------+
| 1 | амр |
+----+-------+
1 row in set (0.00 sec)
-
языковой драйвер: dbase rus cp866
в качестве dataname для query выбираю одну из баз прописанных
в user dsn
-
база представляет из себя несколько таблиц никак не связанных между собой, одна из которых таблица laser
-
языковой драйвер: dbase rus cp866
в качестве dataname для query выбираю одну из баз прописанных
в user dsn
То есть вы используете BDE для доступа к данным.
У меня такой вопрос, а в SQL Explorer можно увидеть это БД и содержимое таблиц?
Ошибка "General SQL error" говорит скорее о не правильных настройках в BDE или в dataware компонентах Вашего приложения.
-
сами настройки подключения приведите, можно отдельным файлом...
-
Почему не работает следующий код для базы paradox
insert into vrem(prim,metod,type,length1,length2)
(select prim,metod,type,length1,length2 from listterb)
-
Почему не работает следующий код для базы paradox
insert into vrem(prim,metod,type,length1,length2)
(select prim,metod,type,length1,length2 from listterb)
скорее всего ему не нравится имя поля type, т.к. возможно для твоего драйвера значение type является зарезервированным. попробуй взять это имя в квадратные скобки.
insert into vrem(prim,metod,type,length1,length2)
(select prim,metod,[type],length1,length2 from listterb)
-
в том запросе убрал скобку перед select и все заработало, хотя в сети находил со скобкой
в query.sql ввожу код
insert into vrem (prim,metod,type,length1,length2) select prim,metod,type,length1,length2 from listterb where metod=:md and prim=r
данный код без insert into vrem (prim,metod,type,length1,length2) работает отлично
а при добавлении этой строчки выдается ошибка:Error creating cursor handle
-
в том запросе убрал скобку перед select и все заработало
насколько я помню, д.б. отдельный help по local sql, где описаны все ньюасны обрезанного синтаксиса для парадокса.
P.S. выбросил бы этот парадокс и делал бы базу на нормальном движке, например на MSDE или Firebird.
-
а как устранить Error creating cursor handle, не подскажешь
а то времени в обрез, заранее благодарен за помощь
-
а как устранить Error creating cursor handle, не подскажешь
а то времени в обрез, заранее благодарен за помощь
а кто код подказывать будет, или будем играть в догадки? если ты пытаешься открыть recordset медотом Open, в то время как в свойстве SQL у тебя указан оператор не возвращающий ни одной записи, то ошибка такого рода совершенно естественна. а update как раз ничего не возвращает. для выполнения update нужно использовать метод ExecSQL.
-
Ошибку устранил но возник новый геморрой:
with query2 do
begin
SQL.Clear;
SQL.Add('insert into vrem (prim,metod,type,length1,length2) select prim,metod,type,length1,length2 from listterb');
SQL.Add('where metod=:md');
Params[0].Asstring:=listmetod;
//Params[1].AsString:=listzadacha;
ExecSQL;
//open;
end;
если вместо параметра md подставлять конкретное значение("амр" например), то все работает,
а при использовании параметра с тем же значением ничего не добавляется в vrem
причем точно известно, что записи с таким параметром есть в listterb и в listmetod хранится нужное
значение параметра
уважаемые прогеры помогите пожалуйста(если необходимо могу выложить куда-нибудь
весь код)
-
Ошибку устранил но возник новый геморрой:
...
если вместо параметра md подставлять конкретное значение("амр" например), то все работает,
а при использовании параметра с тем же значением ничего не добавляется в vrem
причем точно известно, что записи с таким параметром есть в listterb и в listmetod хранится нужное
значение параметра
уважаемые прогеры помогите пожалуйста(если необходимо могу выложить куда-нибудь
весь код)
Если честно, то я ничего не понял.
Что значить "если вместо параметра md подставлять конкретное значение("амр" например), то все работает, а при использовании параметра с тем же значением" Какого параметра с каким тем же значением. Может быть вы приведете два примера -- один работающий, другой нет.
Или Вы хотите сказать, что with query2 do
begin
SQL.Text := 'insert into vrem (prim,metod,type,length1,length2) ' +
'select prim,metod,type,length1,length2 from listterb where metod="амр"';
ExecSQL;
end;
работает, а
with query2 do
begin
SQL.Text := 'insert into vrem (prim,metod,type,length1,length2) ' +
'select prim,metod,type,length1,length2 from listterb where metod=:md';
Params[0].AsString:= 'амр';
ExecSQL;
end;
не работает?
-
это я и имел ввиду
-
это я и имел ввиду
А with query2 do
begin
SQL.Text := 'select prim,metod,type,length1,length2 from listterb where metod=:md';
Params[0].AsString:= 'амр';
Open;
end;
Возвращает набор данных или нет? Обратите внимание, что в параметре не следует писать кавычки.
-
да
-
да
Да возвращает? Тогда Ваш запрос тоже должен работать, если конечно для данного типа БД поддерживаются вложенные запросы.
-
следовательно paradox вложенные запросы не поддерживает?
на какую базу можно быстро и легко перейти c paradox
-
следовательно paradox вложенные запросы не поддерживает?
на какую базу можно быстро и легко перейти c paradox
Не зная постановки задачи дать ответ на это вопрос не возможно. Кроме того, у меня есть подозрение, что Вы просто изобретаете велосипед с квадратными колесами. Вместо того, чтобы описать задачу в общем виде и попросить совета, Вы пытаетесь двигаясь возможно в ложном направлении спрашивать мелкие рецепты.
-
так все же почему параметризированный запрос не работает, ведь оба
запроса вложенные
SQL.Text := 'insert into vrem (prim,metod,type,length1,length2) ' +
'select prim,metod,type,length1,length2 from listterb where metod="амр"';
параметризированный
SQL.Text := 'insert into vrem (prim,metod,type,length1,length2) ' +
'select prim,metod,type,length1,length2 from listterb where metod=:md';
Params[0].AsString:= 'амр';
-
так все же почему параметризированный запрос не работает, ведь оба
запроса вложенные
SQL.Text := 'insert into vrem (prim,metod,type,length1,length2) ' +
'select prim,metod,type,length1,length2 from listterb where metod="амр"';
параметризированный
SQL.Text := 'insert into vrem (prim,metod,type,length1,length2) ' +
'select prim,metod,type,length1,length2 from listterb where metod=:md';
Params[0].AsString:= 'амр';
В конце концов, если это принципиально сделайте так
SQL.Text := Format('insert into vrem (prim,metod,type,length1,length2) ' +
'select prim,metod,type,length1,length2 from listterb where metod="%s"',[Ваша_переменная_со_значением_параметра]);
-
так все же почему параметризированный запрос не работает, ведь оба
запроса вложенные
hint: сделай параметризованный запрос не динамически, а в design time. проверь будет ли работать. потом почитай что такое TQuery.Params, подумай, догадайся в чем косяк
-
доброго времени суток. работаю на windowsXP x64 и сталкнулся с проблемой: при утановленном MS Acces, Exele и др. типового набора средств MS Office, не могу сделать ODBC-aliase для базы данных Access. Просто в закладке "Системный DNS" нету (и при добавлении) нету драйверов баз данных, а есть только драйвер SQL Server.
Подскажите как быть... Постоянно обновляю винду и вот щас обновил Оффис через WSUS, но без результатно.
В прикрепленном файле скрин закладки "Пользовательский DNS", где видны следы от библиотек из пакетов MSOffice и OpenOffice.org, но их нельзя использовать (а так же настроить и удалить ). Я прям в растерености. Ползаю по сайтам помощи Мягкотелых, но пока безрезультатно.
to Diver, спасибо за совет. Но вроде дело в том, что нет пока для 64 винды драйверов МС Аксесс. Запускаю ODBCх32 (лежит в другой папке, а при запуске с панели управления запускается ODBCх64) и там вижу все необходимые файлы... Так же решаю проблему программой VMWare вроде потихоньку продвигаюсь...
-
Скорее всего у вас похерилась в реестре ветка HKLM\Software\ODBC. Импортируйте её с другого компа. На всякий случай прикрепил ветку со своего компа, но у меня Win XP SP3 rus x86, к тому же еще стоит odbc драйвер для mysql. Ну или попробуйте сначала переустановить MDAC- может поможет.