Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.11.2015, 11:55   #1
Ship_1
Форумчанин
 
Регистрация: 10.02.2014
Сообщений: 526
По умолчанию Бескомпонентный ADO. Как указать какой тип данных нужно считывать?

Здравствуйте!

Считываю таблицу Экселя вот таким способом:
Код:
    MyConn.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + NameBook + ';Extended Properties="Excel 8.0;HDR=NO"';
    MyConn.Open;

    s := 'Select * from [Лист1$]';
    MyRecordset.Open(s, MyConn, , , -1);

    RecNo := 1;

    while not MyRecordset.eof do
    begin
      Strk:='';
      for i := 1 to MyRecordset.Fields.Count do
      begin
        begin
          Val:=VarToStr(MyRecordset.Fields[i-1].Value);
          Strk:=Strk+#9+Val;
        end;
      end;
      TotList.Add(Strk);
      inc(RecNo);
      MyRecordset.MoveNext;
    end;
    MyConn.Close;
    MyRecordset := Unassigned;
    MyConn := Unassigned;
Всё хорошо кроме одного: в таблице есть "шапка" с подписями колонок. А некоторые колонки состоят из цифр: номер подпункта, номер кабинета и т.п. И там, где в колонках цифровые записи - текстовые (шапка) уже не читаются (вместо них получается пустая строка). Как сделать так, чтобы всё считывалось как текст? (изменение экселевского файла - не вариант)
Ship_1 вне форума Ответить с цитированием
Старый 17.11.2015, 12:06   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Свойство Type + свойства связанные с размером и десятичной точкой

https://msdn.microsoft.com/en-us/lib...=vs.85%29.aspx

ЗЫ

Не с той оперы

ADO+Excel - тип данных определяется по первым нескольким записям. Попробуй всей колонке задать текстовый тип, даже для цифровых

Пробуй в строке соединения HDR=No;IMEX=1
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 17.11.2015 в 12:17.
Аватар вне форума Ответить с цитированием
Старый 17.11.2015, 12:18   #3
Ship_1
Форумчанин
 
Регистрация: 10.02.2014
Сообщений: 526
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Попробуй всей колонке задать текстовый тип, даже для цифровых
Имеется ввиду колонке в экселе? Но я ж в конце уточнил, что менять сам экселевский файл не получится.
Цитата:
Сообщение от Аватар Посмотреть сообщение
ADO+Excel - тип данных определяется по первым нескольким записям.
И ни одного способа повлиять на это нет и указать тип принудительно? К слову: в самом файле экселя у всех ячеек тип "общий".
Ship_1 вне форума Ответить с цитированием
Старый 17.11.2015, 20:10   #4
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,770
По умолчанию

Цитата:
Сообщение от Ship_1 Посмотреть сообщение
К слову: в самом файле экселя у всех ячеек тип "общий".
Нужно отладчиком смотреть VarType получаемых значений и поступать соответствующим образом. Отладчик у вас перед глазами, не у нас.
Vapaamies вне форума Ответить с цитированием
Старый 18.11.2015, 15:56   #5
Ship_1
Форумчанин
 
Регистрация: 10.02.2014
Сообщений: 526
По умолчанию

Я таки подозреваю, что тип там целый, но как в связи с этим
Цитата:
поступать соответствующим образом
всё равно непонятно... Ведь в результате мне нужно чтоб этот тип изначально определялся тексовым, и вопрос темы как раз и был как это сделать. Что-то типа Fields[2].Type:=String Сколько ни рылся в интернете - ничего на эту тему не нашёл, везде работа с компонентами-таблицами, а у меня бескомпонентное считывание из Экселя.
Пробовал уже MyRecordset.Fields[i].asString, но вышла ошибка, что метод не поддерживается...
Пробовал MyRecordset.Fields[i].FiledType:=ftString, но редактор кода пишет, что ему не знаком ftString
MyRecordset.Fields[0].FiledType:=varString - метод не поддерживается

Последний раз редактировалось Ship_1; 18.11.2015 в 16:17.
Ship_1 вне форума Ответить с цитированием
Старый 18.11.2015, 16:06   #6
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

Пометить данные как именованный блок и потом из него брать.
come-on вне форума Ответить с цитированием
Старый 18.11.2015, 16:16   #7
Ship_1
Форумчанин
 
Регистрация: 10.02.2014
Сообщений: 526
По умолчанию

Цитата:
Сообщение от come-on Посмотреть сообщение
Пометить данные как именованный блок и потом из него брать.
Это как? Или где про это почитать?
Ship_1 вне форума Ответить с цитированием
Старый 18.11.2015, 16:30   #8
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

Как же вы с екселем работаете и не знаете его? Выделяете ячейки и указываете имя.

Цитата:
менять сам экселевский файл не получится
тогда работайте через Ole Automation

Последний раз редактировалось Stilet; 18.11.2015 в 16:53.
come-on вне форума Ответить с цитированием
Старый 18.11.2015, 16:50   #9
Ship_1
Форумчанин
 
Регистрация: 10.02.2014
Сообщений: 526
По умолчанию

Цитата:
Сообщение от come-on Посмотреть сообщение
тогда работайте через Ole Automation
Мне доступен только этот вариант работы с экселевским файлом. И он вполне устраивает, даже больше чем OLE (не нужен установленный Эксель, не запускает Эксель, тормозя работу с программой и отсутствуют многие другие проблемы работы с самим экселевским софтом).
Вы проигнорировали мой вопрос перейдя на другой совет.
Ship_1 вне форума Ответить с цитированием
Старый 18.11.2015, 16:56   #10
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

Ну так вам нельзя трогать файл.

Попробуйте вот так установить что 1 строка это хидер http://www.connectionstrings.com/excel/
come-on вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ADO SQL Excel тип данных ZBEP БД в Delphi 0 13.01.2014 11:59
какой тип данных С# выбрать Sergey_gorobets Помощь студентам 2 08.02.2013 12:04
Как указать тип данных получаемых из TextBox PAMAC Microsoft Office Excel 2 08.11.2012 08:51
Какой тип данных использовать для хранения сэмплов wav файла, если нужно его конвертировать в lossless? Niaden Visual C++ 1 30.10.2012 18:59
как указать проекту какой модуль использовать? Umnik1 Общие вопросы Delphi 3 01.02.2009 20:45