В случае, если кому-то нужна (почти) готовая к использованию функция PHP, на основе этого ответа будет :
/**
* Remove a column from a table.
*
* @param string $tableName The table to remove the column from.
* @param string $columnName The column to remove from the table.
*/
public function DropTableColumn($tableName, $columnName)
{
// --
// Determine all columns except the one to remove.
$columnNames = array();
$statement = $pdo->prepare("PRAGMA table_info($tableName);");
$statement->execute(array());
$rows = $statement->fetchAll(PDO::FETCH_OBJ);
$hasColumn = false;
foreach ($rows as $row)
{
if(strtolower($row->name) !== strtolower($columnName))
{
array_push($columnNames, $row->name);
}
else
{
$hasColumn = true;
}
}
// Column does not exist in table, no need to do anything.
if ( !$hasColumn ) return;
// --
// Actually execute the SQL.
$columns = implode('`,`', $columnNames);
$statement = $pdo->exec(
"CREATE TABLE `t1_backup` AS SELECT `$columns` FROM `$tableName`;
DROP TABLE `$tableName`;
ALTER TABLE `t1_backup` RENAME TO `$tableName`;");
}
В отличие от других ответов, SQL, используемый в этом подходе, похоже, сохраняет типы данных столбцов, тогда как что-то вроде принятого ответа, кажется, приводит ко всем столбцам типа TEXT
.
Обновление 1:
Используемый SQL имеет недостаток, что autoincrement
столбцы не сохранены.
Существует проект Orpheus в SourceForge, но последний выпуск был сделан в 2005 :( Systools должен также быть найден там.
Мы определенно надеялись бы портировать это также. Мы используем много компонентов Orpheus в наших текущих приложениях, и это было бы определенным контрольно-пропускным пунктом к Delphi 2009.
С 11.10.2008, существует версия по http://www.songbeamer.com/delphi/
из Orpheus также. Следующие комментарии присоединяются:
Это основано на версии от CVS. Первые два пакета компилируют и частично тестируются. Для некоторого кода asm все еще нужно обновление. Некоторый bugfixing также должен быть найден и зафиксирован. Вклады приветствуются (используйте форму контакта на вершине). Поиск "FIXME" в источнике. Файлы, которым, возможно, понадобятся особое внимание и bugfixes: OVCDRPVW.PAS, OVCPF.PAS, OVCEDITU.PAS, OVCVIEWR.PAS, OVCSTR.PAS
Когда турбо питание закрыло их двери, я проанализировал свой код, который использовал Orpheus и SysTools. Я нашел, что была только горстка функций SysToosl, которые я использовал и таким образом, мы записали наши собственные функции. (Не может помнить то, чем они были),
Это было довольно прямым, некоторые из них были в более новых версиях Delphi, и остальных было легко кодировать.
Orpheus был немного более трудным. Я был бы готов бросить некоторое время в возвращение Orpheus. Мы заменили его стандартными компонентами Delphi и некоторым кодом, но наши приложения испытывают недостаток в части прохлады, которую это когда-то имело.
Некоторые компоненты в процессе того, чтобы быть портированным к Delphi 2009, включая 5 библиотек TurboPower. Никакой Orpheus или SysTools, все же.
http://www.songbeamer.com/delphi/
Обновление:
Как M Plaut указанный, Orpheus был добавлен к сайту и был обновлен уже 13 ноября.
Мне нужно перенести в delphi 2009 очень старый проект: редактор ЧПУ. В то время в проекте не использовался Orheus, но я изучал его (провел несколько тестов), и текстовый редактор Orpheus по-прежнему остается самым быстрым на рынке. Так что да, мне это очень интересно. Я пытался скомпилировать старый исходный код в delphi 9, но он вылетает. Я не очень хороший программист, но могу провести за вас тесты.
Orpheus407AU_3 был размещен на http://sourceforge.net/projects/tporpheus/ 5 сентября 2009 г.