1. Наш канал codeby в telegram. Пишем об информационной безопасности, методах защиты информации, о программировании. Не пропускай новости с кодебай, будь в тренде ! Подробнее ...

    Скрыть объявление

Delphi и Mssql

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

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

    Arcangel Гость

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

    SMitty Гость

    Репутация:
    0
    На первый вопрос можно ответить примерно так:
    Код:
    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 Гость

    Репутация:
    0
    Спасибо за помощь по первой части. Теперь что касается второй, надо не просто получить 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 Гость

    Репутация:
    0
    За что именно?
     
  5. Arcangel

    Arcangel Гость

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

    Arcangel Гость

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

    Arcangel Гость

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

    Arcangel Гость

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

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