Форум программистов, компьютерный форум, киберфорум
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.95/19: Рейтинг темы: голосов - 19, средняя оценка - 4.95
2 / 2 / 1
Регистрация: 31.05.2014
Сообщений: 169

Поиск в базе по части строки Memo

24.07.2014, 12:52. Показов 4001. Ответов 63
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В общем такой вопрос. В поле мемо считывается файл такого типа:
Номер документа Дата Фамилия
10/15/2001 13.01.2001 Иванова
37/43/2013 01.03.2013 Петров
и такого:
Номер документа=10/15/2001 Дата=13.01.2001 Фамилия=Иванова
Номер документа=37/43/2013 Дата=01.03.2013 Фамилия=Петров
надо чтоб по номеру документа из мемо искал данные в таблице и выводил их в другой мемо, как это сделать?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.07.2014, 12:52
Ответы с готовыми решениями:

Поиск индекса строки MEMO
Как узнать индекс строки memo, зная первое слово этой строки? Т.е. существует к примеру строка "asd 123". Я задаю в поиск asd и...

Поиск слова в файле и вывод строки в поле Memo
Помогите написать код для кнопки после нажатия она должна считать даные с компонента Edit, проверить даные в файле и вивести рядок с...

Поиск по базе по части слова в DataSet (tableadapter)
Добрый день. Вот как я делаю поиск: plangamybaBindingSource.Filter = string.Format(" Like'" + textBox1.Text + "%'"); ...

63
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
25.07.2014, 10:20
Студворк — интернет-сервис помощи студентам
Safer54rus, последний раз спрашиваю. Четко, полностью, наиболее объемисто, в одном сообщении, сформулируйте всю задачу целиком. Подумайте десять минут, не спешите.
1
2 / 2 / 1
Регистрация: 31.05.2014
Сообщений: 169
25.07.2014, 10:28  [ТС]
SatanaXIII, Выбираем файл в xls формате, пример описан ранее, выбираем сами, а не задаём путь в коде.
Данные из файла должны переноситься в DBGrid или StringGrid, далее по номеру документа производится поиск в базе данных (MS SQL) и в соседний Memo должна выводится информация:
Если данные найдены, то выводить информацию о документе из базы (""Номер документа" такой-то "Даты" загружен"), если же такого номера документа не было в базе, то выводить "Документ с таким-то номером отсутствует"
1
Модератор
 Аватар для D1973
9945 / 6480 / 2460
Регистрация: 21.01.2014
Сообщений: 27,462
Записей в блоге: 3
25.07.2014, 10:28

Не по теме:

Цитата Сообщение от SatanaXIII Посмотреть сообщение
Стойте, стойте, стойте. Что за хрень сейчас происходит?
Происходит то, что все мы тут пытаемся развить телепатические способности...


В общем выдаю СВОЕ понимание задачи:
1. У ТС-а есть база, где фигурируют номера каких-то документов
2. Время от времени ТС-у приходят файлы формата ТХТ или XLS, причем ТХТ могут приходить двух видов, как показано в первом посте.
3. Задача в том, чтобы проверить по базе, встречаются ли там (в базе) номера документов, поданные в файлах.

Я правльно угадал?
0
2 / 2 / 1
Регистрация: 31.05.2014
Сообщений: 169
25.07.2014, 10:30  [ТС]
D1973, лучше просто по xls, так как с txt дольше мучаться
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
25.07.2014, 10:43

Не по теме:

Хвала эскулапу!



Цитата Сообщение от Safer54rus Посмотреть сообщение
Данные из файла должны переноситься в DBGrid или StringGrid
А зачем? Зачем пользователю показывать грязное белье?

Не по теме:

Цитата Сообщение от D1973 Посмотреть сообщение
Происходит то, что все мы тут пытаемся развить телепатические способности...
Я уже теперь могу не вспоминать куда я положил очки, а просто прям из-за компа, просканировать соседние комнаты. Довольно удобно.

0
2 / 2 / 1
Регистрация: 31.05.2014
Сообщений: 169
25.07.2014, 10:48  [ТС]
SatanaXIII, ну сказали сделать так...там по мимо всего ещё куча работы, но я хочу для начала с этим разобраться
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
25.07.2014, 11:03
Гсевдокод:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
{
TStringList AllFileText = GetTextFromFileWithOle( OpenDialog->FileName ); // + Внутри определение исходного форматирования и возврат номера функции для парсинга. Или даже прям там же и парсить
 
while( AllFileText->Count-- )
  {
  String CurrNumber = GetNumber( AllFileText->Strings[i] );
  ADOQuery->SQL->Add( CurrNumber );
  if(ADOQuery1->IsEmpty())
    Memo->Lines->Add( "Document " + CurrNumber + " not found" );
  else
    Memo->Lines->Add( Document + ADOQuery1->FieldByName("Data")->Value + "loaded");
  }
}
1
2 / 2 / 1
Регистрация: 31.05.2014
Сообщений: 169
25.07.2014, 11:11  [ТС]
SatanaXIII, а можно комментарии к циклу?
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
25.07.2014, 11:38
Safer54rus, это код ненастоящий. Просто схематично отображена последовательность действий в духе C++.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{ // Где-то в теле какой-то функции
TStringList AllFileText // Создаем список, чтобы туда считать данные из файла
= GetTextFromFileWithOle( // Вызываем заранее нами же написанную функцию, которая получит имя файла, найдет его, откроет его как Ole-объект (непосредственно через Excel), определит какой тип форматирования в нем, прочтет из него данные соответствующим образом, и вернет наконец список прочтенных отформатированных как нам нужно данных.
OpenDialog->FileName ); // Имя файла выбрать посредством стандартного диалогового окна
 
while( AllFileText->Count-- ) // Цикл по всем строкам списка со всем текстом
  {
  String CurrNumber // Создаем переменную, где будем хранить найденный номер
   = GetNumber( // Получаем с помощью нашей самописной функции-парсера номер из текущей строки
  AllFileText->Strings[i] ); // Собственно текущая строка списка
  ADOQuery->SQL->Add( CurrNumber ); // Формируем запрос к базе данных, включая в него полученный номер. Исполняем запрос, все дела.
  if(ADOQuery1->IsEmpty()) // Если ничего не найдено
    Memo->Lines->Add( "Document " + CurrNumber + " not found" ); // тогда пишем, что не найдено
  else // Если найдено
    Memo->Lines->Add( Document + ADOQuery1->FieldByName("Data")->Value + "loaded"); // Пишем, что найдено
  }
}
1
2 / 2 / 1
Регистрация: 31.05.2014
Сообщений: 169
25.07.2014, 11:46  [ТС]
Цитата Сообщение от SatanaXIII Посмотреть сообщение
GetTextFromFileWithOle
вот с этим только не понял, это в смысле функция чтения xls файла?
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
25.07.2014, 12:01
Цитата Сообщение от Safer54rus Посмотреть сообщение
это в смысле функция чтения xls файла?
Да.
Что-то типа:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
TStringList GetTextFromFileWithOle( String FullPathAndNameXlsFile_ )
{
TStringList *sl = new TStringList(); // Лучше конечно по ссылке как параметр
 
if( FileExists( FullPathAndNameXlsFile_ ) )
  {
  Variant Excel;
  try
    {
    Excel = CreateOleObject( "Excel.Application" );
    Excel.OlePropertySet( WideString( "Visible" ), false );
    Variant Book = Excel.OlePropertyGet( WideString( "Workbooks" ) ).OlePropertyGet
        ( WideString( "Open" ), WideString( FullPathAndNameXlsFile_ ) );
    Variant Sheet = Book.OlePropertyGet( "Worksheets", 1 );
 
    // активация последней заполненной ячейки
    Excel.OlePropertyGet("Cells").OlePropertyGet( "SpecialCells",
        XlCellType::xlCellTypeLastCell).OleProcedure("Activate");
    // Получаем значение последней строки
    unsigned rows = Excel.OlePropertyGet("ActiveCell").OlePropertyGet("Row");
    // Получаем значение последней колонки
    unsigned cols = Excel.OlePropertyGet("ActiveCell").OlePropertyGet("Column");
 
    for ( unsigned i = 0; i < raws; ++i )
        {
        String tempRaw = ""; 
        for ( unsigned j = 0; j < cals; ++j )
            {
            tempRaw = tempRaw + Sheet.OlePropertyGet( WideString("Cells"), i, j ); // Для сельской местности
            }
        sl->Add( tempRaw );
        }
    }
  __finally
    {
    try
      {
      Excel.OleProcedure( WideString("Quit") );
      }
    catch(...)
      {
      ::MessageBox( NULL, L"Some error from Ole", L"Error", MB_OK );
      return false;
      }
    }
  }
else
    {
    ::MessageBox( NULL, L"File "".xls"" not found", L"Warning", MB_OK );
    return false;
    }
 
return sl;
}
1
2 / 2 / 1
Регистрация: 31.05.2014
Сообщений: 169
25.07.2014, 12:11  [ТС]
Цитата Сообщение от SatanaXIII Посмотреть сообщение
WideString( FullPathAndNameXlsFile_ )
тут можно прописать ?
C++
1
WideString(OpenDialog1->FileName)
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
25.07.2014, 12:14
Неа. Это ж дело происходит уже внутри функции, которая ничего об OpenDialog-е не знает. А через параметр все передастся как нужно.
0
2 / 2 / 1
Регистрация: 31.05.2014
Сообщений: 169
25.07.2014, 12:17  [ТС]
SatanaXIII, ну мне-то надо, чтоб мы выбирали файл...как тогда быть?
что-то я окончательно запутался...
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
25.07.2014, 12:21
Так вот здесь же все есть; оно автоматом подставиться при вызове:
C++
2
GetTextFromFileWithOle( OpenDialog->FileName );
1
2 / 2 / 1
Регистрация: 31.05.2014
Сообщений: 169
25.07.2014, 12:26  [ТС]
SatanaXIII, так, ладно, а куда пихать, собственно, эту саму функцию? и что кидать на форму?
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
25.07.2014, 12:32
Цитата Сообщение от Safer54rus Посмотреть сообщение
и что кидать на форму?
Ну что вы там хотели и кнопку.
Цитата Сообщение от Safer54rus Посмотреть сообщение
куда пихать, собственно, эту саму функцию?
В кнопку.
1
2 / 2 / 1
Регистрация: 31.05.2014
Сообщений: 169
25.07.2014, 12:35  [ТС]
SatanaXIII,
Цитата Сообщение от SatanaXIII Посмотреть сообщение
В кнопку.
а тогда предыдущую куда? создавать ещё одну кнопку?
[C++ Error] Main.cpp(36): E2090 Qualifier 'XlCellType' is not a class or namespace name
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
25.07.2014, 12:47
Цитата Сообщение от Safer54rus Посмотреть сообщение
а тогда предыдущую куда? создавать ещё одну кнопку?
Нет. Отдельно положить. Самому ручками, по аналогии с обработчиком кнопки.

P.S. Мне кажется скоро я вам начну советовать пойти почитать книжки.
1
2 / 2 / 1
Регистрация: 31.05.2014
Сообщений: 169
25.07.2014, 12:49  [ТС]
SatanaXIII, спасибо, кажется я понял...просто одновременно и работать и пытаться писать программу у меня не получается...надо делать что-то одно за раз
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.07.2014, 12:49

Поиск строки в Memo по фильтру
Здравствуйте, ну расскажу так, мне нужно 1) в memo1 найти строчку по фильтру 2) надо скопировать эту строчку 3) вставить в memo2

Поиск в Memo уникальной строки (Delphi)
Уважаемые программисты! В Memo есть строка, которая встречается один раз, все остальные строчки повторяются. Необходимо найти эту одну...

Поиск значений (строки) из Memo в таблице
В Таблице 3 записи, а в Memo - 5. Необходимо по кнопке показать сообщения (один за другим) с номерами которых нет. То есть;...

Поиск по части строки
Суть в чем. Есть контейнеры с данными. примерная разметка &lt;input type=&quot;text&quot;&gt; &lt;button...

Поиск строки в Memo или через типизированные файлы
В общем, ребята, суть такая: по заданию в программе мне необходимо предусмотреть возможность ввода информации (название, номер и тип...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru