Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как перевести таблицу из базы mdb в формат xls 
:(
    Опции темы
EAV
Дата 29.10.2007, 09:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 23.10.2007

Репутация: нет
Всего: нет



Есть файл TelReg.mdb
В нем есть таблица Main
Также есть файл report.xls, содержащий один пустой лист report
Хочу перекинуть данные из таблицы Main на лист report

Есть следующий код
Код

OleDbDataReader dr;
connStrMDB = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + mdbFile;
connStrXLS = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + xlsFile + ";Extended Properties='Excel 8.0;HDR=Yes'";
connToMDB = new OleDbConnection(connStrMDB);
connToXLS = new OleDbConnection(connStrXLS);

......................

cmdMDB.CommandText = "Select * from Main";
cmdXLS.CommandText = "Insert Into [report$] Values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
connToMDB.Open();
dr = cmdMDB.ExecuteReader();
while (dr.Read())
{
    cmdXLS.Parameters.Clear();
    cmdXLS.Parameters.Add("1", dr.GetString(0));
    cmdXLS.Parameters.Add("2", dr.GetString(1));
    cmdXLS.Parameters.Add("3", dr.GetString(2));
    cmdXLS.Parameters.Add("4", dr.GetString(3));
    cmdXLS.Parameters.Add("5", "");
    cmdXLS.Parameters.Add("6", "");
    cmdXLS.Parameters.Add("7", dr.GetString(6));
    cmdXLS.Parameters.Add("8", dr.GetString(7));
    cmdXLS.Parameters.Add("9", dr.GetString(8));
    cmdXLS.Parameters.Add("10", dr.GetString(9));
    connToXLS.Open();
    cmdXLS.ExecuteNonQuery();            
    connToXLS.Close();
}
dr.Close();
connToMDB.Close();

Однако что я не придумывал, при выполнении cmdXLS.ExecuteNonQuery();
мне пишет: "Внешняя таблица не имеет предпологаемый формат"

Подскажите в чем проблема и как ее можно решить?
PM MAIL   Вверх
thomas
Дата 29.10.2007, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

Репутация: 35
Всего: 65



EAV
Приветствую.
Я думаю что, эта статья тебе поможет.
 smile 


--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
Azzdorf
  Дата 30.10.2007, 00:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 190
Регистрация: 29.3.2007

Репутация: нет
Всего: нет



--------------------
Иногда шаг вперед - это результат хорошего пинка под зад.
PM MAIL   Вверх
EAV
Дата 30.10.2007, 13:44 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 23.10.2007

Репутация: нет
Всего: нет



thomas,  респект за ссылочку
В ней нашел как мою задачу решить с помощью простого запроса!!!
Может кому понадибиться:
Код

connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + mdbFile;
conn = new OleDbConnection(connStr);
cmd = new OleDbCommand("Insert Into [Лист1$] In 'C:\\report.xls' 'Excel 8.0;' Select * from Main", conn);
conn.Open();
cmd.ExecuteNonQuery();            
conn.Close();

Переносит данные из таблицы Main аксесовского файла mdbFile в екселевский файл C:\report.xls
PM MAIL   Вверх
shark1
Дата 13.11.2007, 12:38 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 274
Регистрация: 10.11.2007

Репутация: нет
Всего: нет



Спасибо за хороший пример,но вот почему то у меня выпадает на Ex(System.Data.OleDb.OleDbException was unhandled
  Message="The Microsoft Jet database engine could not find the object 'Sheet1'.  Make sure the object exists and that you spell its name and the path name correctly."
  Source="Microsoft JET Database Engine")
поправте в чем может быть проблемка.Запрос такой :
con1 = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Data\AMS_db.mdb");
            OleDbCommand cmd = new OleDbCommand(@"Insert Into [Sheet1] In 'C:\Data\report.xls' 'Excel 8.0;HDR=NO;' Select * from AMS_db", con1);
            con1.Open();
            cmd.ExecuteNonQuery();
            con1.Close();
Зарание спасибо.
PM MAIL   Вверх
EAV
Дата 4.12.2007, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 23.10.2007

Репутация: нет
Всего: нет



Хочется поднять тему...
Произошла следующая ситуация: в одном из полей записи оказался слишком длиный текст и при выполнении запроса выскакивает сообщение "Размер поля недостаточен, чтобы принять добавляемые данные. Попробуйте вставить меньшее количество данных."

Попробовал уменьшать текст и заметил, что он нормально переноситься только когда в нем не более 255 символов

Может кто подскажет в чем может быть проблема?

Добавлено через 7 минут и 9 секунд
в БД для данного поля выставлено значение "Поле МЕМО"

а вот код перевода данных из БД Access в Excel:
Код

//Копирование шаблона для отчетов в папку с отчетами
string reportFile = "C:\\" + DateTime.Now.ToString("yyyyMMdd_hhmm") + ".xls";
File.Copy(Application.StartupPath + "\\report.xls", reportFile, true);

//Заполнение шаблона отчета данными из таблицы Main
cmd.CommandText = "Insert Into [Лист1$] In '" + reportFile + "' 'Excel 8.0;' Select * from Main order by ID";
conn.Open();
cmd.ExecuteNonQuery();            
conn.Close();

//Открытие файла отчета в Microsoft Excel
Process proc = new Process();
proc.StartInfo.FileName = "excel.exe";
proc.StartInfo.Arguments = reportFile;
proc.Start();

PM MAIL   Вверх
EAV
Дата 4.12.2007, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 23.10.2007

Репутация: нет
Всего: нет



такое ощущение что движок Microsoft JET Database Engine не может передавать больше данных...

хотя с другой стороны этот же движок сохраняет в БД access текст большей длины

вот выкладываю подробную инфу об исключении:

System.Data.OleDb.OleDbException was unhandled
  Message="Размер поля недостаточен, чтобы принять добавляемые данные.  Попробуйте вставить меньшее количество данных."
  Source="Microsoft JET Database Engine"
  ErrorCode=-2147217833
  StackTrace:
       at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
       at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
       at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
       at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
       at System.Data.OleDb.OleDbCommand.ExecuteNonQuery()
       at TelReg.MainForm.menuItemToExcel_Click(Object sender, EventArgs e)
       at System.Windows.Forms.MenuItem.OnClick(EventArgs e)
       at System.Windows.Forms.MenuItem.MenuItemData.Execute()
       at System.Windows.Forms.Command.Invoke()
       at System.Windows.Forms.Control.WmCommand(Message& m)
       at System.Windows.Forms.Control.WndProc(Message& m)
       at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
       at System.Windows.Forms.ContainerControl.WndProc(Message& m)
       at System.Windows.Forms.Form.WndProc(Message& m)
       at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
       at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
       at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
       at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
       at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
       at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
       at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
       at System.Windows.Forms.Application.Run(Form mainForm)
       at TelReg.MainForm.Main()
       at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
       at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException: 


Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  exception.JPG 107,95 Kb
PM MAIL   Вверх
EAV
Дата 1.2.2008, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 23.10.2007

Репутация: нет
Всего: нет



хочется поднять тему...
проблема еще актуальна, а решение никак найти не могу(((
PM MAIL   Вверх
farad
Дата 1.2.2008, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 1.11.2007

Репутация: 3
Всего: 6



Цитата(EAV @  1.2.2008,  14:05 Найти цитируемый пост)
хочется поднять тему...
размер ячейки таблицы Excel не более 255 символов, так что обрубай строки..

PM MAIL   Вверх
EAV
Дата 3.2.2008, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 23.10.2007

Репутация: нет
Всего: нет



Цитата(farad @  1.2.2008,  17:10 Найти цитируемый пост)
размер ячейки таблицы Excel не более 255 символов, так что обрубай строки..

Почему же когда я ввожу текст в экскле руками, то в одну ячейку помещается гораздо больше 255 символов?

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.1249 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.