Delphi и Mssql

Тема в разделе "Delphi - Базы данных", создана пользователем Arcangel, 22 апр 2008.

Статус темы:
Закрыта.
  1. Arcangel

    Arcangel Гость

    Посмотрел по форуму, ничего подобного ненашел, решил завести тему. НУ жна помощь в доработке уже существующей и почти написанной программы.
    1. Есть файл MSExcel необходимо его открыть и вставить данные. Если кто может помочь по коду . Буду очень благодарен. Так как я сам с офисом работал мало.
    2. Есть таблица на сервере MSSQL в которой храняться предметы каждой специальности и время отведенное для них. НЕобходимо при выборе студента и двойном клике по записи, показать его успеваемость и предметы со временем. Причем, ID_studenta, ID_Predmeta, Time, Ocenka, должны будут храниться в другой талбице, причем одна таблиу=ца успеваемости для всех спеиальностей.
     
  2. SMitty

    SMitty Гость

    На первый вопрос можно ответить примерно так:
    Код (Text):
    procedure SaveExcelFile(filename: String;SG: TStringGrid);
    var WorkBk : _WorkBook;
    WorkSheet : _WorkSheet;
    I, J, R, C : Integer;
    IIndex : OleVariant;
    TabGrid : Variant;
    begin
    IIndex := 1;
    R := SG.RowCount;
    C := SG.ColCount;

    if FileExists(filename) then DeleteFile(filename);

    TabGrid := VarArrayCreate([0,(R - 1),0,(C - 1)],VarOleStr);
    I := 0;
    repeat
    for J := 0 to (C - 1) do
    TabGrid[I,J] := SG.Cells[J,I];
    Inc(I,1);
    until I > (R - 1);

    DataModule1.ExcelApplication1.Connect;
    DataModule1.ExcelApplication1.WorkBooks.Add(xlWBatWorkSheet,0);
    WorkBk := DataModule1.ExcelApplication1.WorkBooks.Item[IIndex];
    WorkSheet := WorkBk.WorkSheets.Get_Item(1) as _WorkSheet;
    Worksheet.Range['A1',Worksheet.Cells.Item[R,C]].Value := TabGrid;
    WorkSheet.Name := 'from My Delphi Application';
    Worksheet.Columns.HorizontalAlignment := xlLeft;
    WorkSheet.Columns.ColumnWidth := 14;
    WorkSheet.Range['A' + IntToStr(1),'A' + IntToStr(R)].ColumnWidth := 31;
    DataModule1.ExcelApplication1.Visible[0] := False;

    WorkBk.Close(True, filename, 0, 0);

    DataModule1.ExcelApplication1.Disconnect;
    TabGrid := Unassigned;
    end;
    А со вторым вопросом не очень понятно в чем проблема. Получить ID студента из первой таблицы? Или вытянуть из MSSQL данные по этому ID?
     
  3. Arcangel

    Arcangel Гость

    Спасибо за помощь по первой части. Теперь что касается второй, надо не просто получить ID студента, а этот ID вставить в талбицу в Поле id_studenta и перенести IDшники каждого из предметов данной специальности и соспоставить с ID студента. чтобы по запросу из делфи:

    ADOQuery.SQL.Text:= 'select PREDM.Predmet, '''+d+'''.Kodspecialnosti from '''+d+''', PREDM,YSPEV where '''+d+'''.Kodspecialnosti=PREDM.Kodspecialnosti and PREDM.Id = YSPEV.id_predm and BAHK.Id = YSPEV.id_studenta' ;

    '''+d+''' - в данном случает переменная через котрую происходит обращение к таблицам через форму.
    По данному запросу должен быть осуществлен вывод успеваемости выбранного студента из таблицы специальности.
     
  4. Arcangel

    Arcangel Гость

    За что именно?
     
  5. Arcangel

    Arcangel Гость

    1. А что тогда использовать? БЕз компонентов производить запрос на клиент -сервеную БД?
    2. Как я обычно говорю, критиковать может каждый. Для примера взял бы и написал запрос подходящий для сборки. Но только для 13 таблиц которые
    1. Никак не привязаны и формируются запросо
    2. Соответственно все действия с ними производяться аналогично не как с таблицами а как с результатами запроса.
    3. Каждый программирует по своему кому то переменные ти па "tyktykmoidrug" мало а кому то "d" вполне хватает чтобы машина обработала и выполнила запрос.
     
  6. Arcangel

    Arcangel Гость

    нет не ошибаетесь, таблиц 13. Теперь по порядку попробую ответить на все выше перечисленное. с ВАНК я промахнулся, там должно быть '''+d+''. Проблема в том что тот запрос что я написал выполняется напрямую из программы клиента написанном в делфи. d - это не таблица а переменная которой в зависимости от выбора специальности присваивается соответствующая таблица. Поэтому если я напишу p.Kodspecialnosti=d.Kodspecialnosti язык делфи поймет это как имена таблиц и соответственно выдаст ошибку компиляции. По поводу
    PREDM.Predmet это столбец талицы с предметами а вот PREDM.Kodspecialnosti он нам нужен косвено только для сверки, в какой таблице мы сейчас находимся если они совпадают то соответственно выводится список предметов этой специальности и поставляются оценки студента. INNER JOIN да можно использовать но в данном случае можно обойтись и без него. Под сборкой я подразумевал запрос по нескольким таблицам и вывод нужных столбцов. Говоря что каждый программирует по своему я имел ввиду что каждый программист использует переменные и компоненты с которыми он привык работать и которые ему удобны. По поводу ADODataSet и ADOCommand возможно они и удобные я не отрицаю но я привык уже к ADOOuery и мне намного быстрее написать что то через него чем через что то мне не известное тем более когда время поджимает.
     
  7. Arcangel

    Arcangel Гость

    Структуры тождественные, просто изначально не продумал структуру как следует и сделал 13, и под эти 13 всю структуру клиента поставил, а теперь если менять базу надо весь клиент переписывать снова, а времени нет уже.
    С алиасами я честно говорю, работать пробовал и потм от них отказался, эти алиасы на таблицы по карйней мере на локальных БД, надо созавать на всех ПК изнова как базу переносим. А это марока лишняя, значит надо человеку кто этим будеит пользоваться еще и про создание алиасов обьяснять. Возможно и существует способ по созанию переносимых алиасов но я таких незнаю.
     
  8. Arcangel

    Arcangel Гость

    ок. спс за разьяснения попробую, может что и получиться, хотя я уже частично обошел запрос, реализовав через Edit'ы
    спс за помощь.
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей