Tomsk Sysadmins Forum

Windows => Программирование => Topic started by: 16alex on August 24, 2006, 08:44:35

Title: поиогите с базами
Post by: 16alex on August 24, 2006, 08:44:35
верен ли с точки зрения синтаксиса запрос select * from laser where metod="амр"
подключаюсь к Dbase файлу через дельфи, запрос делаю через query

Title: поиогите с базами
Post by: demiurg on August 24, 2006, 09:22:41
http://www.slackware.tomsk.ru/docs/questions/ (http://www.slackware.tomsk.ru/docs/questions/)
Quote
Вопрос:
Моя {программа, конфигурация, мой оператор SQL} не работает

Ответ:    
Это вообще не вопрос, и я не собираюсь задавать еще десяток наводящих вопросов, чтобы выяснить, в чем на самом деле состоит ваша проблема — у меня есть дела и поинтереснее. Когда я вижу подобные вопросы, то обычно посылаю один из следующих ответов:

    * Вам к этому больше нечего добавить?
    * Ой, это очень плохо. Надеюсь, вы уже это исправили.
    * И какое это имеет отношение лично ко мне?
PS. С точки зрения MySQL синтаксис правильный. DBF к сожалению под руками не оказалось.
Code: [Select]
[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)
Title: поиогите с базами
Post by: 16alex on August 24, 2006, 14:24:01
языковой драйвер: dbase rus cp866
в качестве dataname для query выбираю одну из баз прописанных
в user dsn
Title: поиогите с базами
Post by: 16alex on August 24, 2006, 14:43:27
база представляет из себя несколько таблиц никак не связанных между собой, одна из которых таблица laser
Title: поиогите с базами
Post by: demiurg on August 24, 2006, 15:40:21
Quote from: 16alex
языковой драйвер: dbase rus cp866
в качестве dataname для query выбираю одну из баз прописанных
в user dsn
То есть вы используете BDE для доступа к данным.
У меня такой вопрос, а в SQL Explorer можно увидеть это БД и содержимое таблиц?

Ошибка "General SQL error" говорит скорее о не правильных настройках в BDE или в dataware компонентах Вашего приложения.
Title: поиогите с базами
Post by: Dimos_aka_Neo on August 24, 2006, 18:17:46
сами настройки подключения приведите, можно отдельным файлом...
Title: поиогите с базами
Post by: 16alex on August 28, 2006, 13:22:00
Почему не работает  следующий код для базы paradox
insert into vrem(prim,metod,type,length1,length2)
(select prim,metod,type,length1,length2 from listterb)
Title: поиогите с базами
Post by: visual on August 28, 2006, 14:07:06
Quote from: 16alex
Почему не работает  следующий код для базы paradox
insert into vrem(prim,metod,type,length1,length2)
(select prim,metod,type,length1,length2 from listterb)
скорее всего ему не нравится имя поля type, т.к. возможно для твоего драйвера значение type является зарезервированным. попробуй взять это имя в квадратные скобки.
Code: [Select]
insert into vrem(prim,metod,type,length1,length2)
(select prim,metod,[type],length1,length2 from listterb)
Title: поиогите с базами
Post by: 16alex on August 28, 2006, 15:01:37
в том запросе убрал скобку перед 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
Title: поиогите с базами
Post by: visual on August 28, 2006, 15:12:41
Quote from: 16alex
в том запросе убрал скобку перед select и все заработало
насколько я помню, д.б. отдельный help по local sql, где описаны все ньюасны обрезанного синтаксиса для парадокса.
P.S. выбросил бы этот парадокс и делал бы базу на нормальном движке, например на MSDE или Firebird.
Title: поиогите с базами
Post by: 16alex on August 28, 2006, 15:18:34
а как устранить  Error creating cursor handle, не подскажешь
а  то времени в обрез, заранее благодарен за помощь
Title: поиогите с базами
Post by: visual on August 28, 2006, 16:30:31
Quote from: 16alex
а как устранить  Error creating cursor handle, не подскажешь
а  то времени в обрез, заранее благодарен за помощь
а кто код подказывать будет, или будем играть в догадки? если ты пытаешься открыть recordset медотом Open, в то время как в свойстве SQL у тебя указан оператор не возвращающий ни одной записи, то ошибка такого рода совершенно естественна. а update как раз ничего не возвращает. для выполнения update нужно использовать метод ExecSQL.
Title: поиогите с базами
Post by: 16alex on August 29, 2006, 15:21:23
Ошибку устранил но возник  новый геморрой:
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  хранится нужное
значение параметра
уважаемые прогеры помогите пожалуйста(если необходимо могу выложить куда-нибудь
весь код)
Title: поиогите с базами
Post by: demiurg on August 29, 2006, 15:54:13
Quote from: 16alex
Ошибку устранил но возник  новый геморрой:
...
если вместо параметра md подставлять конкретное значение("амр" например), то все работает,
а при использовании параметра с тем же значением ничего не добавляется в vrem
причем точно известно, что записи с таким параметром есть в listterb и в listmetod  хранится нужное
значение параметра
уважаемые прогеры помогите пожалуйста(если необходимо могу выложить куда-нибудь
весь код)
Если честно, то я ничего не понял.
Что значить "если вместо параметра md подставлять конкретное значение("амр" например), то все работает, а при использовании параметра с тем же значением" Какого параметра с каким тем же значением. Может быть вы приведете два примера -- один работающий, другой нет.
Или Вы хотите сказать, что  
Code: [Select]
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;
работает, а
Code: [Select]
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;
не работает?
Title: поиогите с базами
Post by: 16alex on August 29, 2006, 16:03:05
это я и имел ввиду
Title: поиогите с базами
Post by: demiurg on August 29, 2006, 16:09:02
Quote from: 16alex
это я и имел ввиду
А
Code: [Select]
with query2 do
  begin
    SQL.Text := 'select prim,metod,type,length1,length2 from listterb where metod=:md';
    Params[0].AsString:= 'амр';
    Open;
end;
Возвращает набор данных или нет? Обратите внимание, что в параметре не следует писать кавычки.
Title: поиогите с базами
Post by: 16alex on August 29, 2006, 16:15:59
да
Title: поиогите с базами
Post by: demiurg on August 29, 2006, 16:19:20
Quote from: 16alex
да
Да возвращает? Тогда Ваш запрос тоже должен работать, если конечно для данного типа БД поддерживаются вложенные запросы.
Title: поиогите с базами
Post by: 16alex on August 29, 2006, 16:27:06
следовательно paradox вложенные запросы не поддерживает?
на какую базу можно быстро и легко перейти c paradox
Title: поиогите с базами
Post by: demiurg on August 29, 2006, 16:40:58
Quote from: 16alex
следовательно paradox вложенные запросы не поддерживает?
на какую базу можно быстро и легко перейти c paradox
Не зная постановки задачи дать ответ на это вопрос не возможно. Кроме того, у меня есть подозрение, что Вы просто изобретаете велосипед с квадратными колесами. Вместо того, чтобы описать задачу в общем виде и попросить совета, Вы пытаетесь двигаясь возможно в ложном направлении спрашивать мелкие рецепты.
Title: поиогите с базами
Post by: 16alex on August 29, 2006, 16:57:39
так все же почему параметризированный запрос не работает, ведь оба
запроса вложенные
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:= 'амр';
Title: поиогите с базами
Post by: demiurg on August 29, 2006, 17:11:41
Quote from: 16alex
так все же почему параметризированный запрос не работает, ведь оба
запроса вложенные
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"',[Ваша_переменная_со_значением_параметра]);
Title: поиогите с базами
Post by: visual on August 29, 2006, 18:12:10
Quote from: 16alex
так все же почему параметризированный запрос не работает, ведь оба
запроса вложенные
hint: сделай параметризованный запрос не динамически, а в design time. проверь будет ли работать. потом почитай что такое TQuery.Params, подумай, догадайся в чем косяк
Title: поиогите с базами
Post by: druss on October 03, 2008, 15:26:25
доброго времени суток. работаю на 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  вроде потихоньку продвигаюсь...
Title: поиогите с базами
Post by: Diver on October 04, 2008, 14:17:13
Скорее всего у вас похерилась в реестре ветка HKLM\Software\ODBC. Импортируйте её с другого компа. На всякий случай прикрепил ветку со своего компа, но у меня Win XP SP3 rus x86, к тому же еще стоит odbc драйвер для mysql. Ну или попробуйте сначала переустановить MDAC- может поможет.