Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Круглый стол
  
Правила КС
>> Настройки

Фильтр вопросов
>> Новые вопросы
отслеживать по
>> Новые ответы

Избранное

Страница вопросов
Поиск по КС


Специальные проекты:
>> К л ю к в а
>> Г о л о в о л о м к и

Вопрос №

Задать вопрос
Off-topic вопросы

Помощь

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  06:34[Войти] | [Зарегистрироваться]
Ответ на вопрос № 44088

27-07-2006 01:54
Доброе время суток!

Возникла одна проблема, подскажите кто что может.
Есть код (Delphi 6, Excel XP, Access XP) для перевода БД из Excel в Access:


...

with ADOConnection_mdb do try
    ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+ path_open_mdb+';Mode=ReadWrite;Persist Security Info=False';
    finally
        ADOConnection_mdb.GetTableNames(SN, False);
        if ADOTable_mdb.Active then ADOTable_mdb.Close;
        ADOTable_mdb.TableName := SN[index];
    ADOTable_mdb.Connection:= ADOConnection_mdb;
    ADOTable_mdb.Open; end;
...
with ADOConnection_xls do try
      ConnectionString :='Provider=Microsoft.Jet.OLEDB.4.0; Data Source='+path_open_xls +';Mode=Read; Extended Properties="Excel 8.0;HDR=Yes;"';
      finally try
    ADOConnection_xls.GetTableNames(SL, False);
    ADOTable.Connection:= ADOConnection_xls;
    ADOTable.TableName:=SL[0];
    ADOTable.Open;
    for index := 0 to (SL.Count - 1) do begin
    ADOQuery.SQL.Text :=  'SELECT * FROM  ??????????';
    ADOQuery.SQL.Text :=' INSERT INTO ADOTable_mdb ';

    ADOQuery.ExecSQL; end;
        ADOTable.Close;
        ADOTable_mdb.Close;
...



Суть в том, что пытаюсь скопировать строки из таблицы Excel (ADOTable) в Access (ADOTable_mdb). Пыталась в 'SELECT * FROM' поставить ADOTable, ругается, что неверный синтаксис FROM. Подскажите как исправить этот запрос или чем его можно заменить. За пример кода особая благодарность =).

Заранее ОГРОМНОЕ спасибо всем откликнувшимся.

[+] Добавить в избранные вопросы

Отслеживать ответы на этот вопрос по RSS

Ответы:


Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице.
Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.

27-07-2006 06:55 | Вопрос к автору: запрос дополнительной информации
Клюква?

27-07-2006 05:00 | Сообщение от автора вопроса
ADOQuery.SQL.Text := 'INSERT INTO ADOTable_mdb'#10 +
        'SELECT * FROM [Sheet1$] IN "C:\base2.xls" "EXCEL 8.0;"';

Ошибка синтаксиса FROM... как проклятие какое-то... =((

27-07-2006 04:37
MSDN:

INSERT INTO Statement

Description
Adds a record or multiple records to a table. This is referred to as an append query.
Syntax

Multiple-record append query:

INSERT INTO target [IN externaldatabase] [(field1[, field2[, ...]])]
SELECT [source.]field1[, field2[, ...]
FROM tableexpression

Обратите внимание на IN externaldatabase - директива IN возможна и в SELECT:

MSDN:

SELECT...INTO Statement

Description
Creates a make-table query.

Syntax

SELECT field1[, field2[, ...]] INTO newtable [IN externaldatabase]
FROM source

или

SELECT Statement

Description

Instructs the Microsoft Jet database engine to return information from the database as a set of records.

Syntax

SELECT [predicate] { * | table.* | [table.]field1 [AS alias1] [, [table.]field2 [AS alias2] [, ...]]}
FROM tableexpression [, ...] [IN externaldatabase]
[WHERE... ]
[GROUP BY... ]
[HAVING... ]
[ORDER BY... ]
[WITH OWNERACCESS OPTION]

Смотрите опять на [IN externaldatabase]

Для Excel'е IN выгдядит так:

IN "Полный_путь_к_файлу.xls" "EXCEL 8.0;"

Я же вам давал ссылку на королевство http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1277#05 - поменяйте местами из Excel в MDB

Подключаемся к MDB и в ADOQuery пишем:

ADOQuery.SQL.Text :=
  'INSERT INTO MyADOTable'#10 +
  '  SELECT * FROM [Лист1$] IN "C:\XlDb.xls" "EXCEL 8.0;"';
ADOQuery.ExecSQL;



27-07-2006 04:23 | Сообщение от автора вопроса
К сожалению msdn.microsoft.com у меня не грузится....

Один коннекшн... а как же тогда открыть 2 разные базы одновременно...?

27-07-2006 04:19 | Сообщение от автора вопроса
мда.. с двумя ADOQuery это я погорячилась.

Исправила запрос на:

ADOQuery.SQL.Text := 'INSERT INTO Table SELECT * FROM [Sheet1$]';



Синтаксическая ошибка в FROM

(если нужно всю таблицу скопировать, это надо как-то указывать после INSERT INTO Table? (проблема ещё и в том, что неизвестно заранее какие поля и сколько их будет)).

SOS

Заранее спасибо.

27-07-2006 04:06 | Комментарий к предыдущим ответам
Алана - недосмотрел. Коннекшн должен быть один! Или к XLS или к MDB. Читайте по ссылкам и разбирайтесь.

27-07-2006 03:59
Хм... Странно выглядит вот это (ADOQuery.SQL.Text два раза подряд):

    ADOQuery.SQL.Text :=  'SELECT * FROM  ??????????';
    ADOQuery.SQL.Text :=' INSERT INTO ADOTable_mdb ';



Потом с INSERT'е не плохобы указать что и куда вставляется...
http://msdn.microsoft.com/archive/en-us/office97/html/output/F1/D2/S5A32B.asp?frame=true

27-07-2006 03:32 | Сообщение от автора вопроса
ОО... нашла ошибку - у меня в коде ADOTable.TableName было определено неверно.

Но теперь появилась вторая ошибка - синтаксическая ошибка в INSERT INTO.. =((

ADOQuery.SQL.Text := 'INSERT INTO ADOTable_mdb';





Заранее спасибо за помощь.

27-07-2006 03:22
Откройте xls в Excel'е и посмотрите как называются у вас листы в книге. Первая строка на листе - это заголовок таблицы (у вас HDR=Yes;)

27-07-2006 02:48 | Сообщение от автора вопроса
ADOQuery.SQL.Text :=  'SELECT * FROM [Лист1$]';
- всё-равно выдаёт ошибку ("Ошибка синтаксиса в предложении FROM")
[Sheet1$] - тоже самое.

27-07-2006 02:31
Конечно можно это сделать и так, толко пеменяв местами
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1277#05
http://msdn.microsoft.com/archive/en-us/office97/html/output/F1/D2/S5A328.asp?frame=true

27-07-2006 02:29
FROM [Лист1$]

http://support.microsoft.com/default.aspx?scid=kb;EN-US;257819

Добавьте свое cообщение

Вашe имя:  [Войти]
Ваш адрес (e-mail):На Королевстве все адреса защищаются от спам-роботов
контрольный вопрос:
Однажды, в студеную зимнюю пору я из лесу вышел, был сильный ЧТО?
в качестве ответа на вопрос или загадку следует давать только одно слово в именительном падеже и именно в такой форме, как оно используется в оригинале.
Надоело отвечать на странные вопросы? Зарегистрируйтесь на сайте.
Тип сообщения:
Текст:
Жирный шрифт  Наклонный шрифт  Подчеркнутый шрифт  Выравнивание по центру  Список  Заголовок  Разделительная линия  Код  Маленький шрифт  Крупный шрифт  Цитирование блока текста  Строчное цитирование
  • вопрос Круглого стола № XXX

  • вопрос № YYY в тесте № XXX Рыцарской Квинтаны

  • сообщение № YYY в теме № XXX Базарной площади
  • обсуждение темы № YYY Базарной площади
  •  
     Правила оформления сообщений на Королевстве

    Страница избранных вопросов Круглого стола.
      
    Время на сайте: GMT минус 5 часов

    Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
    Функция может не работать в некоторых версиях броузеров.

    Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
    Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

     
    © При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
    Все используемые на сайте торговые марки являются собственностью их производителей.

    Яндекс цитирования