Author Topic: поиогите с базами  (Read 17991 times)

0 Members and 1 Guest are viewing this topic.

Offline 16alex

  • Newbie
  • *
  • Posts: 26
  • Karma: +0/-0
поиогите с базами
« on: August 24, 2006, 08:44:35 »
верен ли с точки зрения синтаксиса запрос select * from laser where metod="амр"
подключаюсь к Dbase файлу через дельфи, запрос делаю через query


Offline demiurg

  • Hero Member
  • *****
  • Posts: 1014
  • Karma: +0/-0
    • http://larin.tomsk.ru
поиогите с базами
« Reply #1 on: August 24, 2006, 09:22:41 »
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)
« Last Edit: August 24, 2006, 10:43:34 by demiurg »

Offline 16alex

  • Newbie
  • *
  • Posts: 26
  • Karma: +0/-0
поиогите с базами
« Reply #2 on: August 24, 2006, 14:24:01 »
языковой драйвер: dbase rus cp866
в качестве dataname для query выбираю одну из баз прописанных
в user dsn

Offline 16alex

  • Newbie
  • *
  • Posts: 26
  • Karma: +0/-0
поиогите с базами
« Reply #3 on: August 24, 2006, 14:43:27 »
база представляет из себя несколько таблиц никак не связанных между собой, одна из которых таблица laser

Offline demiurg

  • Hero Member
  • *****
  • Posts: 1014
  • Karma: +0/-0
    • http://larin.tomsk.ru
поиогите с базами
« Reply #4 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 компонентах Вашего приложения.

Offline Dimos_aka_Neo

  • Newbie
  • *
  • Posts: 23
  • Karma: +0/-0
поиогите с базами
« Reply #5 on: August 24, 2006, 18:17:46 »
сами настройки подключения приведите, можно отдельным файлом...
Век живи - век учись©

Offline 16alex

  • Newbie
  • *
  • Posts: 26
  • Karma: +0/-0
поиогите с базами
« Reply #6 on: August 28, 2006, 13:22:00 »
Почему не работает  следующий код для базы paradox
insert into vrem(prim,metod,type,length1,length2)
(select prim,metod,type,length1,length2 from listterb)
« Last Edit: August 28, 2006, 13:51:16 by 16alex »

Offline visual

  • Hero Member
  • *****
  • Posts: 714
  • Karma: +0/-0
    • http://
поиогите с базами
« Reply #7 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)

Offline 16alex

  • Newbie
  • *
  • Posts: 26
  • Karma: +0/-0
поиогите с базами
« Reply #8 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
« Last Edit: August 28, 2006, 16:13:29 by 16alex »

Offline visual

  • Hero Member
  • *****
  • Posts: 714
  • Karma: +0/-0
    • http://
поиогите с базами
« Reply #9 on: August 28, 2006, 15:12:41 »
Quote from: 16alex
в том запросе убрал скобку перед select и все заработало
насколько я помню, д.б. отдельный help по local sql, где описаны все ньюасны обрезанного синтаксиса для парадокса.
P.S. выбросил бы этот парадокс и делал бы базу на нормальном движке, например на MSDE или Firebird.

Offline 16alex

  • Newbie
  • *
  • Posts: 26
  • Karma: +0/-0
поиогите с базами
« Reply #10 on: August 28, 2006, 15:18:34 »
а как устранить  Error creating cursor handle, не подскажешь
а  то времени в обрез, заранее благодарен за помощь

Offline visual

  • Hero Member
  • *****
  • Posts: 714
  • Karma: +0/-0
    • http://
поиогите с базами
« Reply #11 on: August 28, 2006, 16:30:31 »
Quote from: 16alex
а как устранить  Error creating cursor handle, не подскажешь
а  то времени в обрез, заранее благодарен за помощь
а кто код подказывать будет, или будем играть в догадки? если ты пытаешься открыть recordset медотом Open, в то время как в свойстве SQL у тебя указан оператор не возвращающий ни одной записи, то ошибка такого рода совершенно естественна. а update как раз ничего не возвращает. для выполнения update нужно использовать метод ExecSQL.
« Last Edit: August 28, 2006, 17:34:33 by visual »

Offline 16alex

  • Newbie
  • *
  • Posts: 26
  • Karma: +0/-0
поиогите с базами
« Reply #12 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  хранится нужное
значение параметра
уважаемые прогеры помогите пожалуйста(если необходимо могу выложить куда-нибудь
весь код)
« Last Edit: August 29, 2006, 15:22:17 by 16alex »

Offline demiurg

  • Hero Member
  • *****
  • Posts: 1014
  • Karma: +0/-0
    • http://larin.tomsk.ru
поиогите с базами
« Reply #13 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;
не работает?
« Last Edit: August 29, 2006, 16:01:28 by demiurg »

Offline 16alex

  • Newbie
  • *
  • Posts: 26
  • Karma: +0/-0
поиогите с базами
« Reply #14 on: August 29, 2006, 16:03:05 »
это я и имел ввиду

Offline demiurg

  • Hero Member
  • *****
  • Posts: 1014
  • Karma: +0/-0
    • http://larin.tomsk.ru
поиогите с базами
« Reply #15 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;
Возвращает набор данных или нет? Обратите внимание, что в параметре не следует писать кавычки.

Offline 16alex

  • Newbie
  • *
  • Posts: 26
  • Karma: +0/-0
поиогите с базами
« Reply #16 on: August 29, 2006, 16:15:59 »
да

Offline demiurg

  • Hero Member
  • *****
  • Posts: 1014
  • Karma: +0/-0
    • http://larin.tomsk.ru
поиогите с базами
« Reply #17 on: August 29, 2006, 16:19:20 »
Quote from: 16alex
да
Да возвращает? Тогда Ваш запрос тоже должен работать, если конечно для данного типа БД поддерживаются вложенные запросы.

Offline 16alex

  • Newbie
  • *
  • Posts: 26
  • Karma: +0/-0
поиогите с базами
« Reply #18 on: August 29, 2006, 16:27:06 »
следовательно paradox вложенные запросы не поддерживает?
на какую базу можно быстро и легко перейти c paradox
« Last Edit: August 29, 2006, 16:27:33 by 16alex »

Offline demiurg

  • Hero Member
  • *****
  • Posts: 1014
  • Karma: +0/-0
    • http://larin.tomsk.ru
поиогите с базами
« Reply #19 on: August 29, 2006, 16:40:58 »
Quote from: 16alex
следовательно paradox вложенные запросы не поддерживает?
на какую базу можно быстро и легко перейти c paradox
Не зная постановки задачи дать ответ на это вопрос не возможно. Кроме того, у меня есть подозрение, что Вы просто изобретаете велосипед с квадратными колесами. Вместо того, чтобы описать задачу в общем виде и попросить совета, Вы пытаетесь двигаясь возможно в ложном направлении спрашивать мелкие рецепты.