• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

Delphi и Mssql

  • Автор темы Автор темы Arcangel
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.
A

Arcangel

Посмотрел по форуму, ничего подобного ненашел, решил завести тему. НУ жна помощь в доработке уже существующей и почти написанной программы.
1. Есть файл MSExcel необходимо его открыть и вставить данные. Если кто может помочь по коду . Буду очень благодарен. Так как я сам с офисом работал мало.
2. Есть таблица на сервере MSSQL в которой храняться предметы каждой специальности и время отведенное для них. НЕобходимо при выборе студента и двойном клике по записи, показать его успеваемость и предметы со временем. Причем, ID_studenta, ID_Predmeta, Time, Ocenka, должны будут храниться в другой талбице, причем одна таблиу=ца успеваемости для всех спеиальностей.
 
На первый вопрос можно ответить примерно так:
Код:
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?
 
Спасибо за помощь по первой части. Теперь что касается второй, надо не просто получить 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+''' - в данном случает переменная через котрую происходит обращение к таблицам через форму.
По данному запросу должен быть осуществлен вывод успеваемости выбранного студента из таблицы специальности.
 
Цитата(Arcangel @ 25:04:2008 - 19:18)
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' ;
За такое надо пожизненный ецих с гвоздями.

За что именно?
 
1. А что тогда использовать? БЕз компонентов производить запрос на клиент -сервеную БД?
2 - за такую вот ужасную строку (и тут есть вопросы: зачем вы ее собираете, у вас что таких таблиц много? даже если собирать, то про существование функции Format в курсе?)
2. Как я обычно говорю, критиковать может каждый. Для примера взял бы и написал запрос подходящий для сборки. Но только для 13 таблиц которые
1. Никак не привязаны и формируются запросо
2. Соответственно все действия с ними производяться аналогично не как с таблицами а как с результатами запроса.
3 - за название переменны (ну это так - по большому счету)
3. Каждый программирует по своему кому то переменные ти па "tyktykmoidrug" мало а кому то "d" вполне хватает чтобы машина обработала и выполнила запрос.
 
нет не ошибаетесь, таблиц 13. Теперь по порядку попробую ответить на все выше перечисленное. с ВАНК я промахнулся, там должно быть '''+d+''. Проблема в том что тот запрос что я написал выполняется напрямую из программы клиента написанном в делфи. d - это не таблица а переменная которой в зависимости от выбора специальности присваивается соответствующая таблица. Поэтому если я напишу p.Kodspecialnosti=d.Kodspecialnosti язык делфи поймет это как имена таблиц и соответственно выдаст ошибку компиляции. По поводу
в) зачем делать так "select PREDM.Predmet, '''+d+'''.Kodspecialnosti" если логичнее было бы так : select PREDM.Predmet, PREDM.Kodspecialnosti, зачем выкрутасы такие?
PREDM.Predmet это столбец талицы с предметами а вот PREDM.Kodspecialnosti он нам нужен косвено только для сверки, в какой таблице мы сейчас находимся если они совпадают то соответственно выводится список предметов этой специальности и поставляются оценки студента. INNER JOIN да можно использовать но в данном случае можно обойтись и без него. Под сборкой я подразумевал запрос по нескольким таблицам и вывод нужных столбцов. Говоря что каждый программирует по своему я имел ввиду что каждый программист использует переменные и компоненты с которыми он привык работать и которые ему удобны. По поводу ADODataSet и ADOCommand возможно они и удобные я не отрицаю но я привык уже к ADOOuery и мне намного быстрее написать что то через него чем через что то мне не известное тем более когда время поджимает.
 
Все-таки почему 13, почему не одна? У них структуры разные или тождественны?
Структуры тождественные, просто изначально не продумал структуру как следует и сделал 13, и под эти 13 всю структуру клиента поставил, а теперь если менять базу надо весь клиент переписывать снова, а времени нет уже.
С алиасами я честно говорю, работать пробовал и потм от них отказался, эти алиасы на таблицы по карйней мере на локальных БД, надо созавать на всех ПК изнова как базу переносим. А это марока лишняя, значит надо человеку кто этим будеит пользоваться еще и про создание алиасов обьяснять. Возможно и существует способ по созанию переносимых алиасов но я таких незнаю.
 
ок. спс за разьяснения попробую, может что и получиться, хотя я уже частично обошел запрос, реализовав через Edit'ы
спс за помощь.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab