J'essaie d'insérer des enregistrements supprimés d'une table dans une autre afin que je puisse archiver les enregistrements supprimés, en quelque sorte comme la corbeille de recyclage de Windows. Pour ce faire, j'utilise un insert dans la requête SELECT:
<cfquery name="archiveDeletion" datasource="#application.dsn#"> INSERT INTO deletedCylinderContentRecords (air_emissions, barcode, building, capacity, Carcinogen, carcinogen_comment, carcinogen_type, cas, casORmixture, chemicalname, concentration, containermaterial, containertype, cyanide, CylinderID, dotdivision, dothazardclass, dothazardclassSub, expirationdate, flashpoint, formula, grade, HMAR_ID, hydroflouric_acid, HydrostaticTestDate, HydrostaticTestDueDate, initial_quantity, inventoried, isdeleted, lastupdated, LeakTestDate, location, manufacturer, ModifiedBy, msds, MSDS_Scan, MSN, Mutagen, nfpablue, nfpared, nfpawater, nfpayellow, ownerid, PeroxideConcentration, PeroxideFormers, PeroxideTestDate, PeroxideTestDueDate, phaseID, PList, price, Purchase_Scan, Purchase_Scan_Link, purchasedate, remarks, ResearchSampleNo, room, sewer, shelf, ShockSensitive, specificgravity, spillage, spillclass, SPInspect, SPInspectDate, SPInterval, stocknumber, StorageRemarks, Teratogen, Undelete, units, usage_comments, usage_transferred, usage_transferred_to, usedinprocess, Validate, ValidateBy, ValidateDate, vendor, VendorNumber, waste, deleterName, timeDeleted, reasonDeleted) SELECT * FROM containers WHERE barcode = '#session.barcode#', <cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="#getDeleterName.last_name#, #getDeleterName.first_name# #getDeleterName.middle_initial#.">, SYSDATETIME(), <cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="#Form.deleteReason5#"> </cfquery>
3 Réponses :
C'est un commentaire trop long pour s'adapter aux commentaires
Permettez-moi de le rendre lisible p> retour au problème à la main. P> < P> Je n'ai pas de DEA ce que cela est censé être. Essayez-vous de faire un groupe d'etrs? Essayez-vous d'ajouter plus de colonnes à la sélection? Pourquoi le code à barres n'est pas dans cfqueryparam code> param qu'un tas de morceaux de données a l'air vraiment étrange. Je m'attendrais à voir trois paramètres pour les trois parties du nom. Puis encore peut-être que c'est ainsi que les données sont stockées. Dernier point mais non le moindre, je pense que toutes les colonnes doivent figurer dans l'instruction SELECT. Pas sûr * fonctionnera (je pourrais avoir tort) p>
Oui, j'essaie d'ajouter plus de colonnes à ma sélection, alors je ne pense pas qu'un tas d'etrs serait la bonne syntaxe. Je suppose que je mets la clause Où après la dernière balise CFQUERYPARAM? Vous n'avez pas changé ma requête dans votre réponse.
Grâce à ce que @Seanlange a dit dans les commentaires, j'ai trouvé la solution. J'ai ajouté les trois colonnes supplémentaires ne faisant pas partie de la table code> conteneurs code> dans la requête code> SELECT CODE>, et assurez-vous que cela a fonctionné. J'ai également appelé explicitement les colonnes au lieu d'utiliser le sélecteur * code>, la solution finale ressemblait à ceci:
<cfquery name="archiveDeletion" datasource="#application.dsn#">
INSERT INTO deletedCylinderContentRecords (air_emissions, barcode, building, capacity,
Carcinogen, carcinogen_comment, carcinogen_type, cas, casORmixture, chemicalname, concentration,
containermaterial, containertype, cyanide, CylinderID, dotdivision, dothazardclass,
dothazardclassSub, expirationdate, flashpoint, formula, grade, HMAR_ID, hydroflouric_acid,
HydrostaticTestDate, HydrostaticTestDueDate, initial_quantity, inventoried, isdeleted, lastupdated,
LeakTestDate, location, manufacturer, ModifiedBy, msds, MSDS_Scan, MSN, Mutagen, nfpablue, nfpared,
nfpawater, nfpayellow, ownerid, PeroxideConcentration, PeroxideFormers, PeroxideTestDate,
PeroxideTestDueDate, phaseID, PList, price, Purchase_Scan, Purchase_Scan_Link, purchasedate,
remarks, ResearchSampleNo, room, sewer, shelf, ShockSensitive, specificgravity, spillage,
spillclass, SPInspect, SPInspectDate, SPInterval, stocknumber, StorageRemarks, Teratogen,
Undelete, units, usage_comments, usage_transferred, usage_transferred_to, usedinprocess, Validate,
ValidateBy, ValidateDate, vendor, VendorNumber, waste, deleterName, timeDeleted, reasonDeleted)
SELECT air_emissions, barcode, building, capacity, Carcinogen, carcinogen_comment, carcinogen_type,
cas, casORmixture, chemicalname, concentration, containermaterial, containertype, cyanide,
CylinderID, dotdivision, dothazardclass, dothazardclassSub, expirationdate, flashpoint, formula,
grade, HMAR_ID, hydroflouric_acid, HydrostaticTestDate, HydrostaticTestDueDate, initial_quantity,
inventoried, isdeleted, lastupdated, LeakTestDate, location, manufacturer, ModifiedBy, msds,
MSDS_Scan, MSN, Mutagen, nfpablue, nfpared, nfpawater, nfpayellow, ownerid, PeroxideConcentration,
PeroxideFormers, PeroxideTestDate, PeroxideTestDueDate, phaseID, PList, price, Purchase_Scan,
Purchase_Scan_Link, purchasedate, remarks, ResearchSampleNo, room, sewer, shelf, ShockSensitive,
specificgravity, spillage, spillclass, SPInspect, SPInspectDate, SPInterval, stocknumber,
StorageRemarks, Teratogen, Undelete, units, usage_comments, usage_transferred, usage_transferred_to,
usedinprocess, Validate, ValidateBy, ValidateDate, vendor, VendorNumber, waste,
<cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="#getDeleterName.last_name#, #getDeleterName.first_name# #getDeleterName.middle_initial#.">,
SYSDATETIME(),
<cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="#Form.deleteReason5#">
FROM containers WHERE barcode = '#session.barcode#'
</cfquery>
@max VOISARD, j'ai traversé votre code. J'ai trouvé les autres problèmes dans toute votre requête.
Dans votre premier QueryParam, vous avez utilisé la liste des valeurs en valeur Attribut, alors vous devez utiliser et selon la suggestion ci-dessus, n'utilisez pas * dans votre requête sélectionnée. Essayez de mettre les noms de colonne mentionnés. Voici ma requête d'échantillon pour vous avec quelques conditions. P> LI>
ul> insérer dans la table1 (ID, nom, âge)
Sélectionnez une pièce d'identité, nom, âge de la table2
Où âge <10 et ID <9 <9 / P> J'espère que cela vous aidera davantage :). Merci. p> p>
Merci pour votre réponse. En fait, je n'utilisais pas les balises
@Larnu Devrais-je me débarrasser de la virgule?
Vous devez ajouter les colonnes supplémentaires dans la section de colonne de votre instruction SELECT. De plus, je vous découragerais fortement de l'utilisation *. Vous devriez nommer explicitement les colonnes. Si l'une ou l'autre de vos tables change, votre code sera cassé. Sur une note latérale, je n'avais aucune idée que les gens écrivent encore un nouveau code avec Coldfusion.
J'ai mal compris le code là-bas, mon mauvais.
Quelle version de SQL Server? Vous ne devriez pas avoir à revenir aux FC pour archiver les lignes que vous souhaitez supprimer. Vous pouvez faire tout cela dans SQL.
Ou mieux encore, ne supprimez pas le disque. Ajouter un
void code>
(bit) code> Colonne de défaut sur
0 code>, puis
update code> it to
1 code> lorsque vous "supprimez" un enregistrement. Ensuite, vous pouvez avoir un processus SQL revenir en arrière et archiver tous les enregistrements annulés.